2016-07-27 30 views
2

Ich versuche, Tupel-Vergleich zu tun. Ich habe 2 als Ergebnis erwartet, aber dieses Codebit gibt 0 aus. Warum?Tupel-Vergleich mit Ganzzahlen

tup1 = (1, 2, 3, 4, 5) 
tup2 = (2, 7, 9, 8, 5) 
count = 0 

if tup1[0:5] == tup2[0]: 
    count + 1 
elif tup1[0:5] == tup2[1]: 
    count + 1 
elif tup1[0:5] == tup2[2]: 
    count + 1 
elif tup1[0:5] == tup2[3]: 
    count + 1 
elif tup1[0:5] == tup2[4]: 
    count + 1 
print(count) 
+0

Keiner der Tests bestehen wird. Typ Tupel wird niemals gleich sein int –

+2

'tup [0: 5]' ist ein Tupel. Es wird niemals gleich einer Ganzzahl sein. – user2357112

+1

Sie versuchen also, eine Schnittmenge der beiden Tupel zu erstellen und zu zählen, wie viele Werte gemeinsam sind? –

Antwort

0

Ihr Code fehlschlägt, wie Sie ein Tupel zu einer ganzen Zahl vergleichen, auch wenn Sie verwenden in wie unten würden Sie müssen noch +=count + 1 wird die Zählvariable nicht verwenden, aktualisieren:

count = 0 

for ele in tup2: 
    if ele in tup1: 
     count += 1 

Sie können es in der linearen Zeit tun und machen doppelte Vorkommen in tup2 nur TUP1 Satz machen:

st = set(tup1) 
print(sum(ele in st for ele in tup2)) 

Wenn Sie die Gesamtsumme von beiden gemeinsamen Elemente wollten, könnten Sie einen Zähler dict verwenden:

tup1 = (1, 2, 3, 4, 5, 4, 2) 
tup2 = (2, 7, 9, 8, 2, 5) 
from collections import Counter 

cn = Counter(tup1) 

print(sum(cn[i] for i in tup2)) 
+0

Oh, ich verstehe. Ich danke dir sehr! – MrMinehart

3

können Sie tun, was Sie mit einem Satz Kreuzung beabsichtigen:

len(set(tup1) & set(tup2)) 

Die Kreuzung die gemeinsamen Elemente in den beiden Tupeln zurückgibt:

>>> set(tup1) & set(tup2) 
{2, 5} 

Aufruf len auf dem Ergebnis der Der Schnittpunkt gibt die Anzahl der gemeinsamen Elemente in beiden Tupeln an.

Obiges gibt jedoch keine korrekten Ergebnisse, wenn in einem der Tupel doppelte Einträge vorhanden sind. Sie tun müssen, sagen wir ein Verständnis, das zu handhaben:

sum(1 for i in tup1 if i in tup2) # adds one if item in tup1 is found in tup2 

Sie müssen die Reihenfolge ändern, in dem, auf dem sie die Tupel erscheinen je kann das Duplikat hat. Oder wenn beide Duples enthalten, können Sie zwei Runs machen, die beide Tupel nebeneinanderstellen und den maximalen Wert aus beiden Runs nehmen.

0

Sie vergleichen eine Scheibe eines Tupels (z. B. tup1 [0: 5]) mit einem Element der anderen, das eine ganze Zahl ist. Daher wird das Ergebnis des Vergleichs immer zu "False" führen. Um zu überprüfen, ob ein Element der tup2 sich auch in TUP1 gelegen ist, können Sie Kreuzung oder die folgende verwenden:

if tup2[n] in tup1: 
    ...