2017-03-08 13 views
0

Ich habe 2 Listen der gleichen Größe.Python Listen Itertools und For Loop

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

startn in list1 entspricht endn in list2.

Ich möchte beide Listen in einer einzigen for Schleife für weitere Berechnungen verwenden. Problem ist: Ich möchte eine Kombination von 2 Elementen aus jeder Liste in der for Schleife verwenden. Zum Beispiel: Ich möchte start1, start3 von list1 und end1, end3 von list2 und nutzen diese vier Werte in einer for Schleife extrahieren.

Für eine einzige Liste, die eine Kombination aus 2 Elementen zu extrahieren, ich weiß, es ist der folgende Code:

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

Aber wie extrahieren I 2 Werte von list1 und die gleichen entsprechenden Werte aus list2 und den Einsatz in eine for Schleife?

Antwort

4

Sie können die beiden Listen zip und dann combination verwenden, um die Werte zu ziehen:

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

ist es wahrscheinlich eine Pythonic Weg, sondern versuchen diese:

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] 

Edit: auf den zweiten Gedanken dieses ist der pythonische Weg. Ich sehe jedoch, dass andere Leute die gleiche Idee haben.

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

Verwenden zip die Start- und End-Listen zusammen in ein Bündel von Tupeln zu kombinieren: (s1, e1), (s2, e2), etc. Dann tun Kombinationen davon:

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, ")")