【发布时间】:2017-11-25 13:48:29
【问题描述】:
我正在尝试按元组的第二个元素对元组列表进行排序。列表中的每个元组都由一个元组和一个整数组成。
l = [((1, 0, 1), 0), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0), ((1, 0, 17), -5), ((1, 0, 20), -3),
((1, 0, 22), 0), ((1, 0, 24), 0)]
sorted(l, key = lambda x:x[1])
print(l)
sorted(l, key = lambda x:x[0])
print(l) # same output
第一个sorted() 语句应根据元组的第二个元素(即0、-1、-1、0、0、0、-5、-3、0、0)对列表进行排序,并应返回一个列表像这样或类似的东西,其中元组的第二个元素处于非递减顺序:
[((1, 0, 17), -5), ((1, 0, 20), -3), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 1), 0), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0),
((1, 0, 22), 0), ((1, 0, 24), 0)]
但是两个print 语句打印相同并且保持原始列表不变。为什么?以及如何按第二个元素对元组列表进行排序?我什至试过key=itemgetter(1),但结果还是一样。
【问题讨论】:
-
sorted() 返回一个新列表。请改用 list.sort()。
标签: python list sorting lambda