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

时间:2013-05-05 11:36:56

标签: 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)]

我想迭代组合列表。我该如何完成这项工作?

2 个答案:

答案 0 :(得分:68)

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)]

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

例如。

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

答案 1 :(得分:3)

这可以在不使用list comprehension进行任何导入的情况下实现。使用您的示例:

indx_11 = find(m(:,2) == 11);
% Find all the places where change occurs which will miss the 1st element
indxDiff = (diff(m(:,1))~=0); 
% Include the 1st element
m(intersect(find([1; indxDiff]), indx_11),1);