使用列表理解嵌套循环

时间:2010-09-03 04:57:46

标签: python for-loop list-comprehension

如果我有两个字符串'abc''def',我可以使用两个for循环来获取它们的所有组合:

for j in s1:
  for k in s2:
    print(j, k)

但是,我希望能够使用列表理解来做到这一点。我尝试了很多方法,但从未设法得到它。有谁知道怎么做?

3 个答案:

答案 0 :(得分:113)

lst = [j + k for j in s1 for k in s2]

lst = [(j, k) for j in s1 for k in s2]

如果你想要元组。

在问题中,for j...是外部循环,for k...是内部循环。

基本上,你可以在列表理解中只需要一个接一个地连接,就可以拥有尽可能多的'x in y'子句。

答案 1 :(得分:31)

由于这实际上是笛卡儿积,因此您也可以使用itertools.product。我认为它更清晰,特别是当你有更多的输入迭代时。

itertools.product('abc', 'def', 'ghi')

答案 2 :(得分:0)

尝试递归:

s=""
s1="abc"
s2="def"
def combinations(s,l):
    if l==0:
        print s
    else:
        combinations(s+s1[len(s1)-l],l-1)
        combinations(s+s2[len(s2)-l],l-1)

combinations(s,len(s1))

为您提供8种组合:

abc
abf
aec
aef
dbc
dbf
dec
def