在Python中迭代多个列表中的所有值组合
给定多个长度可能不同的列表,我想迭代所有值的组合,每个列表中有一个项。例如:在Python中迭代多个列表中的所有值组合,python,iteration,Python,Iteration,给定多个长度可能不同的列表,我想迭代所有值的组合,每个列表中有一个项。例如: first = [1, 5, 8] second = [0.5, 4] 那么我希望的输出是: combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)] 我想迭代组合列表。我怎样才能做到这一点呢?应该可以做到 >>> import itertools >>> list(itertools.product([1
first = [1, 5, 8]
second = [0.5, 4]
那么我希望的输出是:
combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
我想迭代组合列表。我怎样才能做到这一点呢?应该可以做到
>>> import itertools
>>> list(itertools.product([1, 5, 8], [0.5, 4]))
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
请注意,itertools.product
返回一个迭代器,因此,如果只对其进行一次迭代,则无需将其转换为列表
例如
这可以在不使用任何导入的情况下使用。以您的例子:
first = [1, 5, 8]
second = [0.5, 4]
combined = [(f,s) for f in first for s in second]
print(combined)
# [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
如果<代码>第二=[ 0.5,4, 1 ] < /代码>,我们认为输出<代码>(1, 4)< /> >与输出<代码>(4, 1)< /C> > @ ReeDePea(假设您在第一个列表中有一个<代码> 4 /代码>,并且您只希望结果中的唯一输出),我想您只需在以后使用
(0.5,1)、(0.5,5)、(0.5,8)、(4,1)、(4,5)、(4,8)
?此解决方案的问题是,如果我们给产品方法列表,它将不起作用。我们应该只给它单独的清单,只有在这种情况下,它才能返回产品。如果我错了,请纠正我。@Pedram,没错。如果您只有列表列表,那么您需要使用*
(请参阅)将其解压为单独的参数。对于当前的Python,这应该是最重要的答案。我可能错了,但我认为最初的顶级答案是针对Python2的——也许像这样的列表comp在当时是不可能的。我不同意@msm1089,列表理解的解决方案只适用于已知的少量原始列表。相反,itertools
方法可以覆盖任意数量的列表,例如itertools.product(*my_list)
。这是更一般的,有时是必要的。事实上,我同意你的观点@CedricDruck。最通用的是itertools方法。但是,正如你所说,如果只有少量的小列表,列表比较可能更好。好的一点,@CedricDruck,这两种方法都有自己的位置。不过,我认为大多数人都希望尽可能避免再次进口。OP在这里提出的具体问题是一小部分已知列表,因此答案非常适用。
first = [1, 5, 8]
second = [0.5, 4]
combined = [(f,s) for f in first for s in second]
print(combined)
# [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]