Python列出了Itertools和For循环

时间:2017-03-08 00:46:59

标签: python list for-loop itertools

我有2个相同大小的列表。

list1 = [start1,start2,start3, start4]
list2 = [end1, end2, end3, end4]
startn中的

list1对应endn中的list2

我想在单个for循环中使用这两个列表进行进一步的计算。 问题是:我想使用for循环中每个列表中的2个元素的组合。例如: 我想从start1中提取start3list1,从end1提取end3list2,并在for中使用这4个值}循环。

对于单个列表,要提取2个元素的组合,我知道它的代码如下:

import itertools
for a, b in itertools.combinations(mylist, 2):    

但是如何从list1中提取2个值并从list2中提取相同的值并在for循环中使用?

3 个答案:

答案 0 :(得分:4)

您可以zip这两个列表,然后使用combination来提取值:

list1 = ['a', 'b', 'c', 'd']
list2 = [1,2,3,4]

from itertools import combinations
for x1, x2 in combinations(zip(list1, list2), 2):
    print(x1, x2)

#(('a', 1), ('b', 2))
#(('a', 1), ('c', 3))
#(('a', 1), ('d', 4))
#(('b', 2), ('c', 3))
#(('b', 2), ('d', 4))
#(('c', 3), ('d', 4))

答案 1 :(得分:0)

可能有更多的Pythonic方式,但试试这个:

from itertools import combinations

for i, j in combinations(range(4), 2):
    list1_1, list1_2, list2_1, list2_2 = list1[i], list1[j], list2[i], list2[j]

编辑:第二个想法,这是Pythonic方式。我看到其他人也有同样的想法。

for (list1_1, list1_2), (list2_1, list2_2) in combinations(zip(list1, list2), 2):

答案 2 :(得分:0)

使用zip将开始和结束列表组合成一堆元组:(s1,e1),(s2,e2)等。然后组合:

import itertools

starts = 'start1 start2 start3 start4'.split()
ends   = 'end1 end2 end3 end4'.split()

se_pairs = zip(starts, ends)

for a,b in itertools.combinations(se_pairs, 2):
    a_start, a_end = a
    b_start, b_end = b

    print("a: (", a_start, ",", a_end, ")", "b: (", b_start, ",", b_end, ")")