Python 不區分大小寫對字串列表排序

2021-06-17 17:42:48 字數 1223 閱讀 9581

任務:

你想對乙個字串列表排序,並忽略掉大小寫資訊。舉個例子,你想要小寫的a排在大寫的b前面。預設的情況下,字串比較大小寫敏感的(比如所有的大寫字元排在小寫字元之前)。

解決方案:

string_list = ['d','s','a','i','j','a','s','d','u','n']

auxiliary_list = [(x.lower(), x) for x in string_list]

print auxiliary_list

auxiliary_list.sort()

print auxiliary_list

new_list = [x[1] for x in auxiliary_list]

print new_list

輸出:

[('d', 'd'), ('s', 's'), ('a', 'a'), ('i', 'i'), ('j', 'j'), ('a', 'a'), ('s', 's'), ('d', 'd'), ('u', 'u'), ('n', 'n')]

[('a', 'a'), ('a', 'a'), ('d', 'd'), ('d', 'd'), ('i', 'i'), ('j', 'j'), ('n', 'n'), ('s', 's'), ('s', 's'), ('u', 'u')]

['a', 'a', 'd', 'd', 'i', 'j', 'n', 's', 's', 'u']

python 2.4已經提供了對dsu(decorate-sort-undecorate)的原生支援,因此(假設str_list的元素都是真正的普通字串,而不是unicode物件之類),可以用更簡單更快的方式:

new_list = sorted(str_list, key=str.lower)

print new_list

輸出:

['a', 'a', 'd', 'd', 'i', 'j', 'n', 's', 's', 'u']

討論:dus方法建立了乙個輔助列表,每個元素都是元組,元組的元素則來自原列表並被當作"鍵"處理。這個排序是基於鍵的排序,因為python的元組排序比較是根據條目順序進行的(比如,它會首先比較元組的第乙個元素)。要將乙個長度為n的字串列表排序,配合dsu的使用,lower方法只需要被呼叫n次,因而在第一步,decorate階段,以及最後階段,undecorate階段節省了很多時間。

mysql linux不區分大小寫

本文 1 linux下mysql安裝完後是預設 區分表名的大小寫,不區分列名的大小寫 2 用root帳號登入後,在 etc my.cnf中的 mysqld 後新增新增lower case table names 1,重啟mysql服務,這時已設定成功 不區分表名的大小寫 lower case tab...

C IndexOf 不區分大小寫

字串的 indexof 方法是對大小寫敏感的,要想從乙個字串中查詢另外乙個字串 不區分大小寫 就不好處理了。很多人應該會說,先轉換成大寫或者小寫,再查詢,但是不確定別人會怎麼輸入,難道乙個乙個的去轉換?在globalization 命名空間下包含compareinfo類,它包含乙個對大小寫不敏感的 ...

ASP中的區分大小寫與不區分大小寫

asp中的變數,關鍵字不區分大小寫,這誰都知道。但在有些地方又是區分大小的。在下面這種密碼驗證時就不區分大小寫,這樣就增加了asp不安全因素 select from admin where username username and password password 這時的 password 的值...