【问题标题】:Sorting a list of tuples by 2nd item not working in python按第二项排序元组列表在python中不起作用
【发布时间】: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


【解决方案1】:

sorted 返回您提交的列表的排序版本。

列表本身未修改。您总是在打印未排序的列表。试试:

sorted_list_1 = sorted(l, key=lambda x: x[0])
sorted_list_2 = sorted(l, key=lambda x: x[2])
print (sorted_list1, sorted_list2)

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2012-03-13
    • 2021-04-21
    • 2017-06-17
    相关资源
    最近更新 更多