我有一个list1的项目:
[9, 8, 10, 2]
我想整理一下
这些项的值的对应list2为: 10、11、8、5。
如何对list1: 2,8,9,10进行排序,并保持与另一列表的相同关系,以便其他列表将重新排序5、11、10、8
这里有一个类似的问题:Python sort one list from another list,但当我们接到订单时。
发布于 2021-06-03 18:12:35
你可以用这个:
list1, list2 = zip(*sorted(zip(list1, list2)))
或者这个:
order = sorted(range(len(list1)), key=lambda i: list1[i])
list1 = [list1[i] for i in order]
list2 = [list2[i] for i in order]
第一个新列表包含来自list1
和list2
的匹配对,然后对这些对进行排序,主要集中在来自list1
的值上,并将list2
值用作平局器。然后,zip(*new_list)
是一个标准的Python技巧,用于将两对拆分为单独的列表。它将所有的对组合在一起,形成一个新的列表,包含两个长行,一个列有来自每对的第一项,另一行包含第二项。然后将该列表分配给两个变量,将其拆分为两个列表。
第二种方法为两个列表中的项创建索引,然后使用来自list1
的相应项作为键对索引进行排序。然后,它使用新的顺序从每个列表中检索项目。
或者这个混合体可能更容易读懂:
sorted_pairs = sorted(zip(list1, list2))
list1 = [v1 for v1, v2 in sorted_pairs]
list2 = [v2 for v1, v2 in sorted_pairs]
发布于 2021-06-03 18:10:13
一种选择是将这两个列表放在一起,按照压缩列表的每个元组中的第一个项对它们进行排序,然后从排序列表中获取第二个项。
from operator import itemgetter
fst = itemgetter(0)
snd = itemgetter(1)
[snd(tup) for tup in sorted(zip(list1, list2), key=fst)]
>> [5, 11, 10, 8]
如果您需要这两个列表作为输出,那么这个answer就会以与这个一样干净的方式来完成这个任务。
发布于 2021-06-03 18:11:23
combined = zip(list1, list2)
combined.sort(key=lambda x: x[0])
list1 = [x[0] for x in combined]
list2 = [x[1] for x in combined]
https://stackoverflow.com/questions/67826601
复制相似问题