2012-03-30 60 views
0

說我有包含像這樣的字符串列表:0的混合Python:按字符串模板對字符串列表進行排序?

"00x000s00g00wfds0d" 
"dkdf00sdf00sdfg00jk" 
"kf00dfjkd0sdl0sd0f0" 

等..隨機字母。

但我想按他們的0排序。通過這個我的意思是,我想排序列表看起來是這樣的:

"00jksdn0sdf00dfgdfvb" 
"00sdkml0dfg00egbfnnv" 
"00myvcb0xfb00dfgdrhd" 

我在哪裏安排他們的相對位置爲0的組。道歉,如果這沒有多大意義。

+1

包含字符串的列表中沒有'm',但 「00sdkml0dfg00egbfnnv」, 「00myvcb0xfb00dfgdrhd」中有'm'。 請給出與輸入有關的輸出。所以我們可以理解你真正想要的是什麼? – 2012-03-30 19:04:07

+0

你的意思是你需要*組*字符串,以便在同一位置上的零被放置在一起? – 2012-03-30 19:04:22

+0

確實沒什麼意義,因爲它看起來像你想改變輸入字符串,而不是僅僅對它們進行排序。更多細節可以幫助。 – kristaps 2012-03-30 19:05:26

回答

10

您可以通過使用返回零的模式的關鍵功能做到這一點:

def zeros_pattern(s): 
    return [c == "0" for c in s] 

list_of_strings.sort(key=zeros_pattern) 
+0

這很好用 - 非常感謝! – WhatsInAName 2012-03-30 19:10:10

+0

pythonic尋求解決方案的+1 – phooji 2012-03-30 19:12:16

+0

正是我想到的方法。 – kindall 2012-03-30 19:13:37

1

正則表達式是有點overkilling,但有一個與他們的解決方案也:

lst.sort(key=lambda s: [m.start() for m in re.finditer('0', s)]) 
0

使用鍵關鍵詞排序或排序...

l=["00x000s00g00wfds0d", 
    "dkdf00sdf00sdfg00jk", 
    "kf00dfjkd0sdl0sd0f0"] 

def stonum(s): 
    ll=[] 
    for i in s: 
     if(i == '0'): 
      ll.append('0') 
     else: 
      ll.append('1') 
    return int(''.join(ll),2) 

print sorted(l,key=stonum) 

編輯

這個解決方案基本上和@ SvenMarnarch的一樣...除了他的關鍵功能更優雅之外。

相關問題