对混合数值的列表进行排序
场景:有一个列表,里面包含了很多“行”,每行都是一些不同的值。
问题:使用列表的排序功能时,它没有考虑到数字的大小,所以这些值的顺序乱七八糟。
比如说,数字9竟然排在了80后面。
我尝试过使用
list.sort(key=operator.itemgetter[index])
并且做了
list.sort(lambda x,y:int(x[index])<int(y[index]))
但是都没有效果。
2 个回答
2
你走在正确的道路上,但operator.itemgetter是一个函数,所以用法是:
list.sort(key=operator.itemgetter(index))
或者,你也可以使用一个lambda表达式:
list.sort(key=lambda x: x[index])
key参数是正确的选择,而cmp参数在Python 3中已经被去掉了。如果你还是想用它,你应该使用内置的cmp()函数来实现你的比较器:
list.sort(cmp=lambda x, y: cmp(x[index], y[index]))
另外,你可以参考这个链接:http://wiki.python.org/moin/HowTo/Sorting/
3
把转换后的数字当作钥匙来用。
L.sort(key=lambda x: int(x[index]))