[英]Sorting a list based on how another list was sorted. Python 3
我一直在努力根据Python 3中的先前排序列表对列表进行排序,尽管我会寻求你们的帮助。
好的,所以我有一个列表:
list = ['A103', 'A101', 'C101', 'B101']
此列表使用以下代码按字母顺序然后是数字顺序排序:
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
list_sorted = sorted(list, key=alphanum_key)
新列表list_sorted如下所示: ['A101', 'A103', 'B101', 'C101']
。
现在到棘手的部分,我还有另一个列表,其值对应于“列表”中的值,需要以相同的方式对其进行排序。
例:
list = ['A103', 'A101', 'C101', 'B101']
rad = ['£', '$', '€', '@']
list_sorted =['A101', 'A103', 'B101', 'C101']
rad = ['$', '£', '@', '€'].
非常感谢所有帮助,谢谢!
不要尝试排序两次。 而是在排序之前将两个列表压缩在一起,并且仅针对第一项进行排序。
import re
list = ['A103', 'A101', 'C101', 'B101']
rad = ['£', '$', '€', '@']
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key[0])]
# only consider first item ----^
list_sorted = sorted(zip(list, rad), key=alphanum_key)
# zip both lists ---^
print(list_sorted) # [('A101', '$'), ('A103', '£'), ('B101', '@'), ('C101', '€')]
使用拆包,可以很容易地将其概括为两个以上的列表。
list = ['A103', 'A101', 'B101']
rad = ['£', '$', '@']
more = [1, 2, 3]
lists = list, rad, more
...
list_sorted = sorted(zip(*lists), key=alphanum_key)
print(list_sorted) # [('A101', '$', 2), ('A103', '£', 1), ('B101', '@', 3)]
你可以用这个
list1 = ['A103', 'A101', 'C101', 'B101']
list2 = ['£', '$', '€', '@']
list3 = [4,3,2,1]
list_sorted1, list_sorted2, list_sorted3 = zip(*sorted(zip(list1, list2, list3))) # sort all list according to list1
希望它会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.