我有2个相同大小的列表。
list1 = [start1,start2,start3, start4]
list2 = [end1, end2, end3, end4]
startn
中的 list1
对应endn
中的list2
。
我想在单个for
循环中使用这两个列表进行进一步的计算。
问题是:我想使用for
循环中每个列表中的2个元素的组合。例如:
我想从start1
中提取start3
,list1
,从end1
提取end3
,list2
,并在for
中使用这4个值}循环。
对于单个列表,要提取2个元素的组合,我知道它的代码如下:
import itertools
for a, b in itertools.combinations(mylist, 2):
但是如何从list1
中提取2个值并从list2
中提取相同的值并在for
循环中使用?
答案 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, ")")