2015-10-16 37 views
1

對不起,這可能是一個天真的問題。但我是python的新手,這讓我很困惑。如何對python中的列表進行排序以使小寫字母先於大寫字母?

我知道如何通過應用str.lower()將所有字符串視爲小寫字母,但我不知道如何有意將小寫字母的元素作爲大寫字母之前的第一個字母。

對於澄清: 下面是一個例子列表:[Bear, bear, Apple, apple]

我希望它是:[apple, Apple, bear, Bear]

+0

您可以使用'islower()'和'isupper()'檢查大小寫。 – TigerhawkT3

+1

添加一個示例.. –

+0

「在大寫字母之前放置小寫字符串」?請澄清。 –

回答

5

你可以連續使用兩類這樣的,因爲Python的排序是穩定

>>> sorted(sorted(['Bear', 'bear', 'Apple', 'apple'], reverse=True), key=str.lower) 
['apple', 'Apple', 'bear', 'Bear'] 

或者你可以使用單一排序,像這樣:

Python2:

>>> sorted(['Bear', 'bear', 'Apple', 'apple'], key=lambda x: (x.lower(), x.swapcase())) 
['apple', 'Apple', 'bear', 'Bear'] 

Python3:

>>> sorted(['Bear', 'bear', 'Apple', 'apple'], key=lambda x: (x.casefold(), x.swapcase())) 
['apple', 'Apple', 'bear', 'Bear'] 
+0

Ooo ...'str.casefold'。這是一個漂亮的。 – mgilson

2
In [95]: L = ['Bear', 'bear', 'Apple', 'apple'] 

In [96]: sorted(L, key=lambda s:(s.lower(), s[0].isupper())) 
Out[96]: ['apple', 'Apple', 'bear', 'Bear'] 
+0

這是正確的嗎?那麼'['aPple','apple']'呢? – mgilson

+0

@mgilson:不太確定...但它似乎適合示例 – inspectorG4dget

0

Python的內置的排序功能是穩定的,這意味着如果新的排序密鑰需要它的項目將只走動後續排序。這意味着您可以簡單地使用不同的密鑰進行多次排序。

>>> my_list = ['Bear', 'bear', 'Apple', 'apple'] 
>>> my_list = sorted(my_list, key=str.istitle) 
>>> my_list 
['bear', 'apple', 'Bear', 'Apple'] 
>>> my_list = sorted(my_list, key=str.lower) 
>>> my_list 
['apple', 'Apple', 'bear', 'Bear'] 
相關問題