鉴于代码:
a=['a','b','c','d']
b=a[::-1]
print b
c=zip(a,b)
print c
c.sort(key=lambda x:x[1])#
print c
打印:
['d', 'c', 'b', 'a']
[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')]
[('d', 'a'), ('c', 'b'), ('b', 'c'), ('a', 'd')]
为什么[('a','d'),('b','c'),('c','b'),('d','a')]变为[( 'd','a'),('c','b'),('b','c'),('a','d')]?
同样,给定:
c.sort(key=lambda x:3)#
print c
打印:
[('a', 'd'), ('b', 'c'), ('c', 'b'), ('d', 'a')]
没有什么变化 - 为什么?
答案 0 :(得分:7)
因为x [1]表示 second
使用
c.sort(key=lambda x:x[0])
答案 1 :(得分:4)
您已使用第二项作为键对c
进行了排序,而第二项确实上升了,就像您要求它上升一样。什么令人惊讶?!
答案 2 :(得分:1)
from operator import itemgetter
c.sort(key=itemgetter(0))
答案 3 :(得分:1)
正如其他人所说,[1]
指的是第二个元素,因此第一部分中的元素按此方式排序。
至于第二部分,list.sort()
是stable,因此评估相同键的元素将保持它们在序列中的相对位置。这就是为什么使用.sort(reverse=True)
可以提供.sort()
后跟.reverse()
的不同结果。
答案 4 :(得分:0)
您已使用每个元组的第二个元素作为键对列表进行排序,因此您可以获得按其第二个元素排序的元组(注意'a','b','c','d'按升序排列)。有什么问题?