我有两个不同的列表,我想知道如何将一个列表的每个元素与另一个列表的每个元素打印在一起。我知道我可以使用两个 for 循环(每个循环用于其中一个列表),但是我想使用 zip() 函数,因为我将在这个
for loop
中做更多的事情,为此我需要并行迭代。
因此我尝试了以下操作,但输出如下所示。
lasts = ['x', 'y', 'z']
firsts = ['a', 'b', 'c']
for last, first in zip(lasts, firsts):
print (last, first, "\n")
输出:
x a
y b
z c
预期输出:
x a
x b
x c
y a
y b
y c
z a
z b
z c
我相信您正在寻找的功能是 itertools.product:
lasts = ['x', 'y', 'z']
firsts = ['a', 'b', 'c']
from itertools import product
for last, first in product(lasts, firsts):
print (last, first)
x a
x b
x c
y a
y b
y c
z a
z b
z c
另一种产生迭代器的替代方法是使用嵌套理解:
iPairs=( (l,f) for l in lasts for f in firsts)
for last, first in iPairs:
print (last, first)
如果必须使用 zip(),则两个输入都必须扩展到总长度(长度的乘积),第一个输入重复项目,第二个输入重复列表:
iPairs = zip( (l for l in lasts for _ in firsts),
(f for _ in lasts for f in firsts) )
老实说,我认为你无法使用 zip 来做到这一点,因为你正在寻找另一种行为。 使用语法糖并使其与 zip 一起使用只会使您的调试体验失效。
但是如果你拖着我的膝盖:
zip([val for val in l1 for _ in range(len(l2))],
[val for _ in l1 for val in l2])
首先复制第一个列表以获取 xxxyyyzzz 并使用 abcabcabc 复制第二个列表
或
for last,first in [(l,f) for l in lasts for f in firsts]:
print(last, first, "\n")