有没有一种简单的方法可以在python中对字符串进行排序?
我知道你可以做到
string="aCBb"
''.join(sorted(string))
这将把它分成“BCab”。但有没有办法让python将其排序为“aBbC”?
编辑:为了明确我的应用程序必须'b'在'B'之后,它们不能互换。我的原始解决方案,使用key = str.lower(),以原始顺序返回它们。
答案 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"
之后,它恰好适用于您的示例。等号将最终与原始订单相同。