迭代Python中多个列表中的所有值组合

Dur*_*tta 41 python iteration

给定多个可能变化长度的列表,我想迭代所有值的组合,每个列表中的一个项目.例如:

first = [1, 5, 8]
second = [0.5, 4]
Run Code Online (Sandbox Code Playgroud)

然后我希望输出为:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
Run Code Online (Sandbox Code Playgroud)

我想迭代组合列表.我怎么做到这一点?

Vol*_*ity 75

itertools.product 应该做的伎俩.

>>> list(itertools.product([1, 5, 8], [0.5, 4]))
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
Run Code Online (Sandbox Code Playgroud)

请注意,它itertools.product返回一个迭代器,因此如果您只想迭代一次迭代器,则无需将其转换为列表.

例如.

for x in itertools.product([1, 5, 8], [0.5, 4]):
    # do stuff
Run Code Online (Sandbox Code Playgroud)


spi*_*nup 6

使用列表推导无需导入即可实现。使用您的示例:

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)]
Run Code Online (Sandbox Code Playgroud)

  • 我不同意@msm1089,具有列表理解的解决方案仅适用于已知的少量原始列表。相反,“itertools”方法可以覆盖任意数量的列表,例如“itertools.product(*my_lists)”。这是更通用的,有时也是必要的。 (2认同)