使用列表推导式的嵌套 for 循环
如果我有两个字符串,'abc'
和 'def'
,我可以用两个循环来获取它们的所有组合:
for j in s1:
for k in s2:
print(j, k)
不过,我想用列表推导式来实现这个功能。我试过很多方法,但一直没成功。有没有人知道怎么做呢?
4 个回答
1
这只是一个现成的版本,参考了@miles82 的回答(请给应有的认可):
from itertools import product
list(map(list, product('abc', 'def') ))
输出结果:
[['a', 'd'],
['a', 'e'],
['a', 'f'],
['b', 'd'],
['b', 'e'],
['b', 'f'],
['c', 'd'],
['c', 'e'],
['c', 'f']]
如果你想知道为什么我们需要 list(map(list
- itertools.product
返回的是一个迭代器。
43
因为这实际上是一个笛卡尔积,所以你也可以使用 itertools.product。我觉得这样更清晰,特别是当你有更多的输入可迭代对象时。
itertools.product('abc', 'def', 'ghi')
176
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' 语句,只需一个接一个地写就可以了。
为了让代码更易读,可以使用多行来书写:
lst = [
j + k # result
for j in s1 # for loop
for k in s2 # for loop
# condition
]