2016-12-07 4 views
-10

Problem:Set Operationen ohne Datentyp Set() verwendet

Hier ist eine Liste als Eingabe [A,B,C,E]

Ausgang:

[A,B] 
[A,C] 
[A,E] 
[B,C] 
[B,E] 
[C,E] 

Grundsätzlich möchte ich die Vereinigung nehmen der Liste mit sich selbst.

Hier ist der Code:

pageSet_list = ['A', 'B', 'C', 'E'] 

pageSet_set = list() # To create a list of sets so that we can take their union 

for page in pageSet_list: 
    toBeAdded = set(page) 
    pageSet_set.append(toBeAdded) 
pageSet_list = list() 

for i in range(len(pageSet_set)): 
    for j in range(i,len(pageSet_set)): 
     z=pageSet_set[i].union(pageSet_set[j]) 
     if (len(z) == 2): # somethin = set([]) 
      print 'z: ',z 
      pageSet_list.append(z) 

Ausgabe dieses Codes:

z: set(['A', 'B']) 
z: set(['A', 'C']) 
z: set(['A', 'E']) 
z: set(['C', 'B']) 
z: set(['B', 'E']) 
z: set(['C', 'E']) 

Fehler:

z: set(['C', 'B']) 

Ausgabe sollte waren z: set(['B', 'C']).

Jetzt habe ich vor kurzem erfahren, dass das Set eine ungeordnete Datenstruktur ist und daher keine bestimmte Reihenfolge der Elemente aufrechterhält. Durch die Ausführung der Vereinigungsoperation von zwei Sätzen mit der Methode union wird die Reihenfolge der Elemente geändert.

Meine Frage ist:

Wie führe ich den Satz Operationen, Vereinigung und Schnitt, ohne Datentyp-Set() verwenden?

+0

vielleicht in die [NumPy-Bibliothek] (https://docs.scipy.org/doc/numpy/index.html)? –

+0

ist die Reihenfolge neu erstellbar? Könnten Sie die Daten später einfach sortieren, um die Reihenfolge wiederherzustellen? und wie wird die Ordnung etwa durch Kreuzung aufrechterhalten? Wenn '(1, 2, 3)' und '(3, 2)', was ist das Ergebnis? – acushner

+0

@AndreaCorbellini Ich habe die Frage bearbeitet. Nein, es ist kein Duplikat. – kshikhar

Antwort

1
import itertools 

for acom in itertools.combinations('ABCD',2): 
    print acom 
+0

Okay, es funktioniert für die Eingabe [A, B, C, E ].Wie funktioniert das für die Liste [[A ',' B '], [A', 'C'], ['A', 'E']]? Damit ich ausgegeben werde: [[A, B, C], [A, B, E], [A, C, E]] (Kombinationen der Länge 3) – kshikhar

+0

für acom in iertools.combinations (['AB', "AC", "AE"], 2): sorted (set (acom [0] + acom [1])) – Organis

+0

für acom in Kombinationen (['AB', 'AC', 'AE', 'BC' , 'BE', 'CE'], 2): print sortierte (set (acom [0] + acom [1])) Wie man die Duplikate loswird? – kshikhar