根据Python结果,将一个列表按降序排序

3

输入

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个回答

5
你看到的错误是因为你需要导入 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]

@mhwake ValueError: 需要多于0个值来解包 - Hamad Hassan
@HamadHassan:真的吗?在我的Python 2和3中都可以工作。你使用的是哪个版本的Python?你测试了哪个示例? - mhawke
可能是我的错误,我在屏幕上看到的是(92、93、94、95)[0.76、0.46、0.56、0.64]第一个不是列表吗?我甚至尝试打印a [0],但得到了索引超出范围的错误! - Hamad Hassan
我正在使用Python 2.7。 - Hamad Hassan
我在谈论输入... 输入是以那种形式呈现的... 输出应该是列表!对此我感到抱歉。 - Hamad Hassan
显示剩余2条评论

1

你是否导入了 operator

虽然不是必需的:

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

类型错误:lambda()需要1个参数,但给出了2个 - Hamad Hassan
1
如果你以相反的顺序zip()列表,你根本不需要使用lambda。而且它不起作用(你需要将键函数作为关键字参数传递)。 - mhawke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接