如果我有两个字符串'abc'
和'def'
,则可以使用两个for循环获取它们的所有组合:
for j in s1:
for k in s2:
print(j, k)
但是,我希望能够使用列表理解来做到这一点。我已经尝试了许多方法,但是从未尝试过。有谁知道如何做到这一点?
Answers:
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”子句,只需一个接一个地坚持。
L1 = [[[e1, e2, ...], ...], ...]
->[ e for L2 in L1 for L3 in L2 for e in L3 ]
for
语句的顺序与您for
在两个单独的行上将其编写为两个循环的顺序相同。
lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]
或什么
由于这本质上是笛卡尔积,因此您也可以使用itertools.product。我认为这更清楚,尤其是当您有更多输入可迭代项时。
itertools.product('abc', 'def', 'ghi')
也尝试递归:
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