给定可能长度不同的多个列表,我希望迭代每个值的所有组合,每个列表中选取一个元素。例如:
first = [1, 5, 8]
second = [0.5, 4]
那么我希望输出的结果为:
combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
我想迭代遍历这个合并的列表,我该如何做到?
给定可能长度不同的多个列表,我希望迭代每个值的所有组合,每个列表中选取一个元素。例如:
first = [1, 5, 8]
second = [0.5, 4]
那么我希望输出的结果为:
combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
我想迭代遍历这个合并的列表,我该如何做到?
itertools.product
应该可以解决问题。
>>> 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
返回一个迭代器,因此如果你只想迭代一次,则不需要将其转换为列表。for x in itertools.product([1, 5, 8], [0.5, 4]):
# do stuff
这可以通过使用列表推导式而不需要任何导入来实现。以您的示例为例:
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)]
itertools
方法可以涵盖任意数量的列表,例如itertools.product(*my_lists)
。这更加通用,有时是必要的。 - Cedric Druck
second = [0.5, 4, 1]
,并且我们认为输出(1, 4)
和输出(4, 1)
是相同的,那么怎么办? - Nate Anderson4
,并且您希望结果中仅有唯一的输出)我认为您只需要使用set(tuple(sorted(lst)) for lst in itertools.product(...))
之类的方法进行过滤即可。 - Volatility(0.5, 1), (0.5, 5), (0.5, 8), (4, 1), (4, 5), (4, 8)
? - Reman*
将其解包成单独的参数(参见这里)。 - Volatility