如何排序字符串列表?
在Python中,创建一个按字母顺序排列的列表最好的方法是什么?
11 个回答
40
list.sort()
其实就是这么简单 :)
62
582
基本回答:
mylist = ["b", "C", "A"]
mylist.sort()
这个方法会直接修改你原来的列表,也就是说它是在原地排序。如果你想要一个排序后的副本,而不改变原来的列表,可以使用sorted()
函数:
for x in sorted(mylist):
print x
不过,上面的例子有点简单,因为它们没有考虑地区差异,并且是区分大小写的排序。你可以利用可选的参数key
来指定自定义的排序规则(另一种方法是使用cmp
,但这个方法已经不推荐使用了,因为它需要多次计算,而key
每个元素只计算一次)。
所以,如果你想根据当前地区的规则进行排序,并考虑语言特定的规则,可以使用cmp_to_key
这个来自functools的辅助函数:
sorted(mylist, key=cmp_to_key(locale.strcoll))
最后,如果需要的话,你可以为排序指定一个自定义地区设置:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']
最后一点:你会看到一些不区分大小写的排序例子使用了lower()
方法——这些是不正确的,因为它们只适用于ASCII字符集。对于任何非英语的数据,这两种方法都是错误的:
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)