如何对字符串列表排序?

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

  • 答案:
  • 基本答案:

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

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

    for x in sorted(mylist):
    print x

    但是,上面的示例有点幼稚,因为它们没有考虑语言环境,并且执行区分大小写的排序。您可以利用可选参数key来指定自定义排序顺序(另一种方法,使用cmp是一种不推荐的解决方案,因为它必须被多次求值-每个元素只计算一次)

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

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

    最后,如果需要,可以指定custom locale对于排序:

    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)