gpt4 book ai didi

python - 同时对多个列表进行排序

转载 作者:太空狗 更新时间:2023-10-30 00:50:36 27 4
gpt4 key购买 nike

我有三个由相同数量的元素组成的列表:

a = [0.3, 1.5, 0.2, 2.6]
b = [1, 2, 3, 4]
c = [0.01, 0.02, 0.03, 0.04]

我需要根据列表 a 中的递减值 同时对这三个列表进行排序。这意味着我必须根据 a 进行排序,但是 a 也需要进行排序。输出应如下所示:

a_s = [2.6, 1.5, 0.3, 0.2]
b_s = [4, 2, 1, 3]
c_s = [0.04, 0.02, 0.01, 0.03]

这样 a_s 现在只是按递减值排序,而 b_sc_s 根据此排序更改其项目位置。

最佳答案

简答

a_s, b_s, c_s = map(list, zip(*sorted(zip(a, b, c), reverse=True)))

长答案

首先,您必须压缩三个列表,创建一个项目列表:

>>> a = [0.3, 1.5, 0.2, 2.6]
>>> b = [1, 2, 3, 4]
>>> c = [0.01, 0.02, 0.03, 0.04]
>>> z = zip(a, b, c)
>>> z
[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]

然后,您对这个列表进行排序。元组列表按其第一个元素排序(当第一个元素相等时,使用第二个元素,依此类推):

>>> zs = sorted(z, reverse=True)
>>> zs
[(2.6, 4, 0.04), (1.5, 2, 0.02), (0.3, 1, 0.01), (0.2, 3, 0.03)]

然后您“解压缩”列表。解压缩与以每个元组为参数调用 zip 相同,这是通过使用星号语法实现的:

>>> u = zip(*zs)
>>> u
[(2.6, 1.5, 0.3, 0.2), (4, 2, 1, 3), (0.04, 0.02, 0.01, 0.03)]

您得到一个元组列表,但您想要列表。因此,您将列表构造函数映射到这些项目上:

>>> u
[(2.6, 1.5, 0.3, 0.2), (4, 2, 1, 3), (0.04, 0.02, 0.01, 0.03)]
>>> map(list, u)
[[2.6, 1.5, 0.3, 0.2], [4, 2, 1, 3], [0.04, 0.02, 0.01, 0.03]]

然后您可以将列表解压缩到变量中:

>>> a_s, b_s, c_s = map(list, u)

观察

排序时,您可以明确指出将使用哪个项目进行排序,而不是依赖于元组的默认顺序:

>>> from operator import itemgetter
>>> sorted(z, key=itemgetter(1)) # Sort by second item
[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]
>>> sorted(z, key=itemgetter(2)) # Sort by third item
[(0.3, 1, 0.01), (1.5, 2, 0.02), (0.2, 3, 0.03), (2.6, 4, 0.04)]

关于python - 同时对多个列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19931975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com