首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何排序一个列表和重新排序另一个列表保持相同的关系python?

如何排序一个列表和重新排序另一个列表保持相同的关系python?
EN

Stack Overflow用户
提问于 2021-06-03 18:04:42
回答 4查看 603关注 0票数 1

我有一个list1的项目:

代码语言:javascript
运行
复制
[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,但当我们接到订单时。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-06-03 18:12:35

你可以用这个:

代码语言:javascript
运行
复制
list1, list2 = zip(*sorted(zip(list1, list2)))

或者这个:

代码语言:javascript
运行
复制
order = sorted(range(len(list1)), key=lambda i: list1[i])
list1 = [list1[i] for i in order]
list2 = [list2[i] for i in order]

第一个新列表包含来自list1list2的匹配对,然后对这些对进行排序,主要集中在来自list1的值上,并将list2值用作平局器。然后,zip(*new_list)是一个标准的Python技巧,用于将两对拆分为单独的列表。它将所有的对组合在一起,形成一个新的列表,包含两个长行,一个列有来自每对的第一项,另一行包含第二项。然后将该列表分配给两个变量,将其拆分为两个列表。

第二种方法为两个列表中的项创建索引,然后使用来自list1的相应项作为键对索引进行排序。然后,它使用新的顺序从每个列表中检索项目。

或者这个混合体可能更容易读懂:

代码语言:javascript
运行
复制
sorted_pairs = sorted(zip(list1, list2))
list1 = [v1 for v1, v2 in sorted_pairs]
list2 = [v2 for v1, v2 in sorted_pairs]
票数 5
EN

Stack Overflow用户

发布于 2021-06-03 18:10:13

一种选择是将这两个列表放在一起,按照压缩列表的每个元组中的第一个项对它们进行排序,然后从排序列表中获取第二个项。

代码语言:javascript
运行
复制
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就会以与这个一样干净的方式来完成这个任务。

票数 5
EN

Stack Overflow用户

发布于 2021-06-03 18:11:23

代码语言:javascript
运行
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67826601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档