根据python的结果按降序排序一个列表

时间:2016-04-14 12:22:15

标签: python list sorting

输入

a= (92, 93, 94, 95)
b= [0.76, 0.46, 0.56,0.64]

必需的是基于列表b按降序排序列表a

a= [92, 95, 94, 93]
b= [0.76, 0.64, 0.56, 0.46]

我用过

a,b = zip(*sorted(zip(a,b), key=operator.itemgetter(0), reverse=True))

我尝试使用它按升序排序,然后尝试使用其他列表以相反的顺序写入。

错误是:

key=operator.itemgetter(0), reverse=True))
NameError: name 'operator' is not defined

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您看到的错误是因为您需要导入operator模块。即使这样做也无法解决问题。

相反,你可以这样做:

b, a = zip(*sorted(zip(b,a), reverse=True))

对于您的数据:

>>> a = [92, 93, 94, 95]
>>> b = [0.76, 0.46, 0.56,0.64]
>>> b, a = zip(*sorted(zip(b,a), reverse=True))
>>> a
(92, 95, 94, 93)
>>> b
(0.76, 0.64, 0.56, 0.46)

这为您提供了元组。如果你真的想要/需要清单:

>>> a = [92, 93, 94, 95]
>>> b = [0.76, 0.46, 0.56,0.64]
>>> b, a = (list(x) for x in zip(*sorted(zip(b,a), reverse=True)))
>>> a
[92, 95, 94, 93]
>>> b
[0.76, 0.64, 0.56, 0.46]

答案 1 :(得分:0)

你有import operator吗?

并非需要:

z = list(zip(a, b))
z = sorted(z, key=lambda i: i[1], reverse=True)
a, b = list(zip(*z))