2012-03-30 102 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的一样...除了他的关键功能更优雅之外。