2016-04-14 80 views
0

输入排序一个列表基于蟒的结果以降序

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

需要被列表的排序基于上表b以降序

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 

有什么建议?

回答

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] 
+0

@mhwake ValueError异常:需要比0值更解压 –

+0

@HamadHassan:真的吗?它适用于Python 2和Python 3.我使用的Python版本是?你在测试哪个例子? – mhawke

+0

这可能是我的错误,我在屏幕上看到的是(92,93,94,95) [0.76,0.46,0.56,0.64]第一个不是列表?我试过甚至打印一个[0],但索引出界! –

0

你是否import operator

不在于它需要:

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

TypeError:()只需要1个参数(给出2个) –

+1

如果您以其他顺序压缩列表,则根本不需要lambda。此外它不起作用(您需要将关键函数作为关键字参数传递)。 – mhawke