2016-08-11 51 views
1

是否有更简单的方法来迭代多个字符串而不是大量的嵌套for循环?Python:避免使用多个嵌套for循环遍历字符串

list = ['rst','uvw','xy'] 

for x in list[0]: 
    for y in list[1]: 
     for z in list[2]: 
      print x+y+z 

rux 
ruy 
... 
tvx 
tvy 
twx 
twy 

列表示例我真的想避免打字编写循环:

list = ['rst','uvw','xy','awfg22','xayx','1bbc1','thij','bob','thisistomuch'] 

回答

2

您需要itertools.product:

import itertools 
list = ['rst','uvw','xy','awfg22','xayx','1bbc1','thij','bob','thisistomuch'] 
for x in itertools.product(*list): 
    print(''.join(x)) 

产品从迭代器它得到返回的所有元素的可能的元组。所以

itertools.product('ab', 'cd') 

将返回一个发生器,产生( '一个', 'C'),( 'A', 'D'),( 'B', 'C'),( 'B',' d')

+0

感谢,正是我一直在寻找! – Eplox

3

您正在寻找从itertoolsproduct功能:

import itertools 

lst = ['rst','uvw','xy'] 
[''.join(s) for s in itertools.product(*lst)] 

# ['rux', 
# 'ruy', 
# 'rvx', 
# 'rvy', 
# 'rwx', 
# ... 
# 'twx', 
# 'twy'] 
0

另一种方式?当然。更简单?也许不......

我猜这是因为你不一定知道你的列表中有多少个字符串。

关于什么: SL = [ 'ABC', 'MNO', '某某']

def strCombo(l,s=''): 
    if(len(l)==0): 
     return s 
    elif(len(l)==1): 
     return [(s+x) for x in l[0]] 
    else: 
     return [strCombo(l[1:],(s+x)) for x in l[0]] 



final = [] 
for x in strCombo(sl)[0]: 
    final = final + x