嵌套循环使用列表理解

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

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

不过,我希望能够使用列表理解来做到这一点。 我已经尝试了很多方法,但从来没有设法得到它。 有谁知道如何做到这一点?

 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...是内部循环。

从本质上讲,你可以通过一个接一个地粘贴多个独立的“for x in y”子句来进行列表理解。

由于这本质上是一个笛卡儿积,你也可以使用itertools.product 。 我认为它更清晰,尤其是当你有更多的input迭代。

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

也尝试recursion:

 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