简短回答a_s, b_s, c_s = map(list, zip(*sorted(zip(a, b, c), reverse=True)))
冗长的回答
首先,您必须压缩三个列表,创建一个项目列表:
^{pr2}$
然后,对这个列表进行排序。元组列表按第一个元素排序(当第一个元素相等时,使用第二个元素,依此类推):>>> 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)]