为什么我不能对此列表进行排序?

时间:2009-11-29 13:20:00

标签: python list tuples

statlist = [('abc',5,1), ('bzs',66,1), ... ]
sorted(statlist, key=lambda x: int(x[1]))

我想按整数从大到小排序。在这种情况下,5和66.但它似乎没有工作。

8 个答案:

答案 0 :(得分:7)

sorted函数返回 new 列表,因此您需要分配函数的结果,如下所示:

new_list = sorted(statlist, key=lambda x: int(x[1])) 

答案 1 :(得分:7)

使用.sort方法进行就地排序:

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist.sort(key=lambda x: int(x[1]))

如果您确实想使用sorted,请重新分配变量:

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]))

对于降序排序,请使用reverse

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]), reverse=True)

然后,您最好使用itemgetter而不是lambda

import operator
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=operator.itemgetter(1), reverse=True)

答案 2 :(得分:3)

您可以传递,按键和反向.sort功能

>>> x.sort(key=lambda x:x[1],reverse=True)
>>> x
[('bzs', 66, 1), ('abc', 5, 1)]
>>>

答案 3 :(得分:3)

用于就地排序使用

statlist.sort(key=lambda x: x[1])

用于创建其他列表,使用排序数据

otherlist = sorted( statlist, key=lambda x: x[1] )

答案 4 :(得分:2)

from operator import itemgetter
statlist = [('abc',5,1), ('bzs',66,1), ... ]

# statlist.sort modifiest the statlist, sorted returns a new one
# reverse puts the largest items to the front
statlist.sort(key=itemgetter(1), reverse=True)

答案 5 :(得分:1)

回应亚历克斯的评论,他认为sorted()的工作方式与“排序函数”类似:

如果它像“排序函数”一样工作,则不太可能被放入库中。

在任何情况下,都没有排序功能 ...你引用列表对象的排序方法

使用交互式解释器进行简单演示:

>>> alist = [3, 2, 1]; x = alist.sort(); print x; print alist
None
[1, 2, 3]
>>> alist = [3, 2, 1]; x = sorted(alist); print x; print alist
[1, 2, 3]
[3, 2, 1]

这是一个提示:寻找模式和相似之处,但始终验证您的直观推断。您可能希望将这些提示应用于reversereversed

答案 6 :(得分:0)

>>> s = [('xyz', 8, 1), ('abc',5,1), ('bzs',66,1) ]
>>> s = sorted(s, key=lambda x: int(x[1]))
>>> s.reverse()
>>> print s
[('bzs', 66, 1), ('xyz', 8, 1), ('abc', 5, 1)]

答案 7 :(得分:0)

嘿,当我将某些内容保存到数组中时,我不会担心订单,最后我会使用sorted(),例如statlist = sorted(statlist),如果你想要它从大到小statlist = sorted(statlist, reverse = True)这是从最小到最小的简单方法!

我使用过的示例代码(仅提取)

    while i <= math.sqrt(intnum):
        if (intnum % i) == 0:
            numbers.insert(0,i)
            numbers.insert(0,int(intnum/i))
            print(i,":", int(intnum/i))
        i += 1
    numbers = sorted(numbers, reverse = True)