2012-11-02 124 views
0

它可以按字母順序排列字符,忽略大寫和小寫?我需要他們留在他們的情況下,所以我不能使用.lower().upper(),但我希望他們安排的信件優先,所以得到的字符串會是這樣的:如何字符串中的字符,忽略大小寫?

"LMmqRRs"

,而不是

"LMRRmqs"

+0

這可能會幫助: http://stackoverflow.com/questions/ 10269701 /不區分大小寫的排序 - 無結構化的結果 – RKumsher

+1

您想讓排序穩定嗎? 「aA」會保留「aA」,「aa」保留「aa」),還是您希望案例具有特定的順序,無論是「aA」還是「Aa」? – DSM

+0

我寧願讓大寫字母先出現在同一個字母的任何給定數字 – spikey273

回答

4

這可以確保大寫字母先走:

s = 'mqRMRsL' 
result = ''.join(sorted(s, key=lambda c:(c.lower(), c))) 
# LMmqRRs 

這不:

s = 'mqRMRsL' 
result = ''.join(sorted(s, key=str.lower)) 
# LmMqRRs 
2

這裏是一個輕微的改動BlaXpirit解決方案,使排序穩定:

def alphabet_cmp(a, b): 
    a_lower, b_lower = a.lower(), b.lower() 
    if a_lower == b_lower: 
     return cmp(a, b) 
    else: 
     return cmp(a_lower, b_lower) 

x = 'ABcdCDab' 
''.join(sorted(x, cmp=alphabet_cmp)) 
# 'AaBbCcDd' 
+0

'NameError:name'cmp'is not defined'。 'TypeError:'cmp'是這個函數的一個無效的關鍵字參數。見[**這**](http://docs.python.org/3/whatsnew/3.0#ordering-comparisons) –

+0

而我的解決方案是穩定的無論如何... –

+0

我不知道爲什麼cmp是無效的關鍵字,在Python 27中排序的文檔字符串是「排序(iterable,cmp = None,key = None,reverse = False) - >新排序列表」,但是您的解決方案更加優雅,也更穩定,我不知道爲什麼我沒有意識到,當我在發佈之前快速閱讀您的回覆時,對不起 – jcr

相關問題