2013-02-05 48 views
1

在PythonPython的排序:子串

s= "ABCC" 
n = len(s) 
sorted(set([s[a:b] for a in range(n) for b in range(a+1,n+2)]) 

給我,按字母順序排序的子串用了重複

['A', 'AB', 'ABC', 'ABCC', 'B', 'BC', 'BCC', 'C', 'CC'] 

我怎樣才能進一步的子字符串的長度排序。

['A', 'B', 'C', 'AB', 'BC', 'CC', 'ABC', 'BCC', 'ABCC'] 
+0

相關:http://stackoverflow.com/questions/14103620/length-wise-sorted-list-but-same-length-in-alphabetical-order-in -a-step –

回答

3

簡單,

sorted(set(s[a:b] for a in range(n) for b in range(a+1,n+1)), 
     key=lambda x:(len(x),x)) 

這將創建由比較完成的關鍵。首先比較字符串長度以確定順序。如果琴絃具有相同的長度,則決勝是絃樂內容。

+0

清除OP的代碼中的set([])'和'n + 2' – georg

+0

@ thg435 - 謝謝。 – mgilson

2

這是您的解決方案:

s= "ABCC" 
n = len(s) 
sorted(sorted(set([s[a:b] for a in range(n) for b in range(a+1,n+2)])),key=len) 
+0

該解決方案錯誤?你自己運行了嗎?請用Python運行它並告訴我它是否錯誤。 – Guddu

+0

Python排序保證穩定,所以double'sorted'沒有錯。 Upvoted。 – georg

+0

我錯過了使用兩個「排序」調用(忽略我最後一條評論(已刪除))+1的事實。 –