【发布时间】:2020-03-28 12:51:30
【问题描述】:
我想对这个列表进行排序:
[('alpha', 2), ('delta', 3), ('charlie', 3), ('tango', 1), ('foxtrot', 1), ('echo', 2)]
结果应该是
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]
charlie 排在第一位是因为它有最大的数字,它在 delta 之前是因为 c 按字母顺序排在 d 之前(所以如果数字相同,它会按字母顺序对这些特定的数字进行排序)。 alpha 在 echo 之前,因为即使它们具有相同的数字,a 按字母顺序排在 e 之前。 echo 领先于狐步,因为 echo 的数字更大,而狐步领先于探戈,即使它们的数字相同,因为 f 在 t 之前。
目前我的方法涉及一个 for 循环(查看每个元素)内部的 while 循环(将项目移动到正确的位置),如果数字相同,那么之后的另一个循环会执行相同的操作,所以它可以按字母顺序排序。
有更好的方法吗?
【问题讨论】:
-
sorted函数执行此操作:sorted(mylist, key=lambda x: (-x[1], x[0]))- 寻找骗子。
标签: python python-3.x list sorting tuples