[英]Sort a string in lexicographic order python
我想按字典順序將字符串排序到列表中
str='aAaBbcCdE'
到
['A','a','a','B','b','C','c','d','E']
但是sorted()
給了我這個輸出:
['A','B','C','E','a','a','b','c','d']
如何按字典順序排序?
當工作有內置函數時,不要使用 lambda 函數。 也永遠不要使用 sorted 的cmp
參數,因為它已被棄用:
sorted(s, key=str.lower)
要么
sorted(s, key=str.upper)
但這可能無法保持 'A' 和 'a' 的順序,所以:
sorted(sorted(s), key=str.upper)
這將並且,根據sorted
的性質,對於幾乎已排序的列表(第二個sorted
),操作將非常快。
您可以使用 2 元組作為密鑰:
text='aAaBbcCdE'
sorted(text, key=lambda x: (str.lower(x), x))
# ['A', 'a', 'a', 'B', 'b', 'C', 'c', 'd', 'E']
元組中的第一個元素str.lower(x)
是主鍵(使a
在B
之前出現),而x
本身打破了關系(使A
在a
之前a
)。
cmp
是這樣做的舊方法,現在已棄用,但為了后代:
s='aAaBbcCdE'
sorted(s, lambda x,y: cmp(x.lower(), y.lower()) or cmp(x,y))
data = input() data=list(data) data.sort()
現在變量“data”將提供按字典排序的輸入。
使用natsort庫。 使用庫比使用 stackoverflow 代碼解決方案更好。 (僅在 SO 中的某處閱讀)
如果您不處理簡單字符串的集合,但仍想按自然排序順序而不是字典順序排序:
假設您有一組對象實例,您希望按特定屬性對其進行排序,並且屬性值可以以大寫或小寫開頭,那么您可以執行以下操作:
sorted(objects, lambda object: object.attr1.lower())
假設attr1
是字符串類型。 為什么這樣做? 因為您將所有排序鍵轉換為相同的大小寫以進行排序,從而打敗了字典排序。 如果不使用lower() 或upper() 將導致字典排序順序而不是自然的字母排序順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.