如何按字母顺序对字符串进行排序,小写字母在大写字母之前?

时间:2013-12-11 05:33:20

标签: python string

有没有一种简单的方法可以在python中对字符串进行排序?

我知道你可以做到

string="aCBb"
''.join(sorted(string))

这将把它分成“BCab”。但有没有办法让python将其排序为“aBbC”?

编辑:为了明确我的应用程序必须'b'在'B'之后,它们不能互换。我的原始解决方案,使用key = str.lower(),以原始顺序返回它们。

3 个答案:

答案 0 :(得分:7)

如果你需要保证大写字母在小写之前排序:

>>> ''.join(sorted(string, key=lambda s:(s.lower(), s)))
'aBbC'

>>> ''.join(sorted(sorted(string), key=str.lower))
'aBbC'

答案 1 :(得分:5)

这是Python排序方法的第一个例子: http://docs.python.org/2.7/howto/sorting.html#key-functions

sorted("aCBb", key=str.lower)

使用内置的str.lower应该比自定义的lambda更快。

编辑鉴于大写字母必须首先出现的限制,gnibbler的回答是正确的。如果键返回一个元组,则排序将按第一个元素排序,然后使用第二个元素来断开关系。在第二种情况下,它首先按区分大小写的表示形式排序,然后按不区分大小写的形式排序 - 因为sorted对于共享相同键的值是稳定的,这不会撤消第一种排序。我有兴趣看到任何关于哪个人关心哪个更快的分析。

答案 2 :(得分:1)

您可以按小写值对其进行排序:

"".join(sorted("aCBb", key=lambda x: x.lower())) # => "aBbC"

请注意,它并不保证"b"位于"B"之后,它恰好适用于您的示例。等号将最终与原始订单相同。