mylist.sort这会修改您的原始列表(即就地排序)。要获取列表的排序副本,而不更改原始列表,请使用sorted()函数:12for x in s"/>

关于python:如何对字符串列表进行排序?

关于python:如何对字符串列表进行排序?

How to sort a list of strings?

在Python中创建按字母顺序排序的列表的最佳方法是什么?


基本答案:

1
2
mylist = ["b","C","A"]
mylist.sort()

这会修改您的原始列表(即就地排序)。要获取列表的排序副本,而不更改原始列表,请使用sorted()函数:

1
2
for x in sorted(mylist):
    print x

但是,上面的示例有点天真,因为它们不考虑区域设置,并执行区分大小写的排序。您可以利用可选参数key来指定自定义排序顺序(替代方法,使用cmp,是一个不推荐使用的解决方案,因为它必须多次评估 - key每个元素只计算一次)。

因此,要根据当前区域设置进行排序,请考虑特定于语言的规则(cmp_to_key是functools的辅助函数):

1
sorted(mylist, key=cmp_to_key(locale.strcoll))

最后,如果需要,您可以指定用于排序的自定义区域设置:

1
2
3
4
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字符子集。对于任何非英语数据,这两个都是错误的:

1
2
3
4
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)

值得注意的是sorted()功能:

1
2
for x in sorted(list):
    print x

这将返回列表的新排序版本,而不更改原始列表。


1
list.sort()

它真的很简单:)


对字符串进行排序的正确方法是:

1
2
3
4
5
6
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'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

前面的mylist.sort(key=lambda x: x.lower())示例适用于仅限ASCII的上下文。


请在Python3中使用sorted()函数

1
2
items = ["love","like","play","cool","my"]
sorted(items2)

But how does this handle language specific sorting rules? Does it take locale into account?

不,list.sort()是一个通用的排序功能。如果要根据Unicode规则进行排序,则必须定义自定义排序键功能。您可以尝试使用pyuca模块,但我不知道它有多完整。


旧问题,但是如果你想在不设置locale.LC_ALL的情况下进行语言环境感知排序,你可以按照这个答案的建议使用PyICU库:

1
2
3
4
5
6
7
import icu # PyICU

def sorted_strings(strings, locale=None):
    if locale is None:
       return sorted(strings)
    collator = icu.Collator.createInstance(icu.Locale(locale))
    return sorted(strings, key=collator.getSortKey)

然后用例如:

1
new_list = sorted_strings(list_of_strings,"de_DE.utf8")

这对我有用,无需安装任何语言环境或更改其他系统设置。

(这已在上面的评论中提出,但我想更加突出,因为我一开始就错过了它。)


Or maybe:

1
2
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))

假设s ="ZWzaAd"

要排序上面的字符串,简单的解决方案将低于一。

1
print ''.join(sorted(s))

推荐阅读

    linuxls命令排序?

    linuxls命令排序?,工作,系统,信息,数据,命令,目录,标准,基础,管理,时间,Linux

    linux修改为中文命令?

    linux修改为中文命令?,系统,设备,工具,电脑,底部,管理,中文,命令,虚拟机,字

    linux磁盘列表命令?

    linux磁盘列表命令?,情况,管理,系统,单位,信息,数据,命令,磁盘,服务,时间,lin

    linux修改路由命令?

    linux修改路由命令?,产品,网络,管理,系统,技术,经理,环境,数据,培训,设备,lin

    linux时间命令修改?

    linux时间命令修改?,时间,系统,信息,命令,大陆,国家,终端,时分,时区,日期,lin

    查看修改linux命令?

    查看修改linux命令?,时间,系统,信息,名称,命令,指令,文件夹,感叹号,文件大

    linux路由表修改命令?

    linux路由表修改命令?,网络,系统,地址,信息,数据,通信,发行,命令,文件,终端,

    linux修改地址命令?

    linux修改地址命令?,地址,系统,代码,网络,服务,信息,密码,命令,管理,基础,lin

    linux排序数字命令?

    linux排序数字命令?,标准,数字,单位,情况,系统,信息,命令,文件,顺序,参数,lin

    linuxll排序命令?

    linuxll排序命令?,系统,信息,地址,标准,工作,命令,时间,数据,文件,目录,Linux

    linux命令查找字符串?

    linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文

    修改主机名命令linux?

    修改主机名命令linux?,系统,地址,服务,主机名,网络,情况,名称,查询系统,异

    linux命令筛选列表?

    linux命令筛选列表?,工具,状态,位置,工作,预期,命令,名称,标准,数据,系统,在L

    linux修改账户的命令?

    linux修改账户的命令?,密码,系统,状态,名称,信息,用户,命令,位置,软件,管理,L

    linux的长列表命令?

    linux的长列表命令?,工作,系统,信息,命令,数据,目录,电脑,软件,时间,设备,Lin

    linux中修改密码命令?

    linux中修改密码命令?,密码,系统,服务,名称,软件,信息,时间,状态,命令,用户,l

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux命令行修改字体?

    linux命令行修改字体?,系统,终端,字体,实时,适当,等级,工具,颜色,字符,窗口,l

    linux命令修改gid?

    linux命令修改gid?,系统,管理,情况,密码,代码,工具,时间,地方,数字,命令,Linu

    取消修改linux命令?

    取消修改linux命令?,工作,地址,状态,系统,信息,命令,电脑,管理,目录,编辑,lin