2016-09-26 3 views
-1

Ich habe 2 identische Listen a = [a1, a2, a3] b = [a1, a2, a3] Was ist ein effektivste Weg über diese 2 Liste iterieren gleichzeitig während ich nur in der Kombination von verschiedenen Elementen aus beiden Listen trotz Reihenfolge interessant bin, dh a1a2 und a1a3. Kombinationen a1a1, a2a2, a3a3, a2a1, a3a1 Ich bin interessant zu überspringen, aber interessante halten Iteratoren Werte verfügbar.Python durch 2 Listen Looping Überspringen ähnliche Elemente

Will Ausdruck Fragen re: interessant in möglichen Kombinationen von zwei Elementen aus der Liste a = [a1, a2, a3]

+0

Verwenden Sie 'itertools.product', vielleicht, mit einem' if left == right: continue ', um diejenigen zu überspringen, wo sie beide gleich sind. – jonrsharpe

+2

@jonrsharpe kann es nicht so einfach wie 'iertools.combination (a, 2)' als beide die Liste identisch sind und Kombination würde automatisch entfernen die Duplikate – armak

+1

@armak Sie könnten es so tun, aber das tut es nicht * "Iteriere diese 2 Listen gleichzeitig" *. Es hängt davon ab, was die OP tatsächlich versucht zu erreichen, was nicht ganz klar ist - wenn die beiden Listen * immer * identisch sind, ist es nicht offensichtlich, warum sie zwei haben, um damit zu beginnen. – jonrsharpe

Antwort

3

Use combinations,

from itertools import combinations 
for i in combinations(['a1','a2','a3'],2): 
    print i 
+1

mit kleinen Änderungen, arbeitete. Danke @Rahul K P – Felix

0

Listenkomprehensionen!

a = ['1', '2', '3'] 
b = ['1', '2', '3'] 

c = [i + j for i in a for j in b if j != i] 
print(c) # prints -> ['12', '13', '21', '23', '31', '32'] 

EDIT

wenn Sie a1a2 und a2a1 betrachten Duplikate sein können Sie einige clevere schneiden, um sie zu überspringen, wie so:

c = [ia + ib for i, ia in enumerate(a) for ib in a[i+1:]] 
print(c) # prints -> ['12', '13', '23'] 

Wie Sie feststellen könnte, Liste b wird nicht in der zweiten verwendet.

+0

in diesem Fall bin ich nicht interessiert an '21', '31', '32' da es Elemente in Kombinationen wiederholt – Felix

+0

@Felix Oh, tut mir leid, ich habe das verpasst. Der Code ist jetzt aktualisiert. –