簡體   English   中英

按字典順序對字符串進行排序python

[英]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)是主鍵(使aB之前出現),而x本身打破了關系(使Aa之前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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM