2017-01-11 6 views
0

Ich habe 2 identische Listen wie gezeigt:Concatenate Elemente identischer Listen ohne Python Duplikate

list_1 = ['A','B','C','D','E','F'] 
list_2 = ['A','B','C','D','E','F'] 

ich jedes Element in ihnen verketten,

for i in list_1: 
    for j in list_2: 
     print(i+' and '+j) 

Können Sie mir helfen, die doppelten Kombinationen zu entfernen, die (zB: AA, .. FF und auch AB, AC, BC, usw.)

Vielen Dank im Voraus!

+1

Dies ist ein Fall eines XY-Problems. Sie brauchen nicht zwei identische Listen, nur eine Liste und 'iterations.combinations'. –

+0

Wollen Sie auch CA, CB, etc? –

+0

Rechts @JoelCornett der eigentliche Code besteht nur aus einer einzigen Liste und es ist ein Fall von Kombinationen. Dies ist das schnelle Beispiel, das ich mir ausgedacht habe, übersprang meine Meinung, dass;) – Sailesh

Antwort

2

man einfach einen Vergleich und Einschränkungen es i auszuführen weniger als j:

for i in list_1: 
    for j in list_2: 
     if i < j: 
      print(i+' and '+j) 

aufgrund der Reihenfolge constraint wenn 'A and B' gedruckt ist, bedeutet dies, dass A weniger als B, so dass es die Einschränkung bedeutet, 'A' > 'B' schlägt fehl und B and A wird nicht gedruckt.

+1

'i' und' j' sind keine ganzen Zahlen !!! Das sind Charakterlisten. –

+2

@barakmanos: Ordnung wird auch für 'str' Objekte definiert: Hier wird die lexikographische Reihenfolge verwendet. Solange "<" eine mathematische nicht-reflexive Ordnungsrelation ist (nicht-reflexiv, transitiv und asymmetrisch), wird dies funktionieren. –

+0

OK, Sie haben Recht! –

2

Verwenden Sie itertools.combinations. In diesem Fall wird der Code viel einfacher. Sie benötigen nur eine Liste, combinations erzeugt automatisch nur eindeutige Kombinationen. Sie müssen also nicht "AA" oder "CB" filtern, wenn Sie nur "BC" passieren.

>>> from itertools import combinations 

>>> l=['A','B','C','D','E','F'] 

list(combinations(l, 2)) 
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('A', 'F'), 
('B', 'C'), ('B', 'D'), ('B', 'E'), ('B', 'F'), 
('C', 'D'), ('C', 'E'), ('C', 'F'), 
('D', 'E'), ('D', 'F'), 
('E', 'F')] 

>>> # or with joined strings 
>>> [' and '.join(x) for x in combinations(l, 2)] 
['A and B', 'A and C', 'A and D', 'A and E', 'A and F', 
'B and C', 'B and D', 'B and E', 'B and F', 
'C and D', 'C and E', 'C and F', 
'D and E', 'D and F', 
'E and F'] 

Ich habe Ausgabe formatiert, um zu sehen, dass Sie sauberes Ergebnis haben.

Verwandte Themen