2017-05-22 2 views
0

Ich versuche, den CodeFehler bekommen, während über zwei Listen in Python Iterieren

list = ["ABCD", "LMN" , "STU" , "PQRS" ] 

dict = ["ABCD" , "LMN" , "PQRS" ] 

for i in list: 
for j in dict: 
    if (i == j): 
    print(i,j) 
    else: 
    print(i,j,"No match") 

Erwartete ausgegeben wird,

ABCD ABCD 
LMN LMN 
STU No match 
PQRS PQRS 

Aber wie es vergleicht i mit jedem Wert von j zu laufen, Es gibt mir Ausgabe als,

('ABCD', 'ABCD') 
('ABCD', 'LMN', 'No match') 
('ABCD', 'PQRS', 'No match') 
('LMN', 'ABCD', 'No match') 
('LMN', 'LMN') 
('LMN', 'PQRS', 'No match') 
('STU', 'ABCD', 'No match') 
('STU', 'LMN', 'No match') 
('STU', 'PQRS', 'No match') 
('PQRS', 'ABCD', 'No match') 
('PQRS', 'LMN', 'No match') 
('PQRS', 'PQRS') 

Ich versuchte mit Pause und Continue-Anweisungen immer noch nicht erwartet d Ergebnis Kann mir jemand dabei helfen?

+0

Ihre Druck Tupeln und dabei in einer verschachtelten Schleife bei jeder Iteration mit Filter zu tun, warum sind Sie, dass die Ausgabe erwartet erwarten? –

Antwort

2

Sie haben eine verschachtelte for-Schleife - als solche vergleichen Sie jedes i in der Liste mit jedem einzelnen j in dict.

Sie könnten der folgenden stattdessen versuchen:

for i in list: 
    if i in dict: # checks if the string exists in dict. 
     print(i, i) 
    else: 
     print(i, "No match") 
1

Scheint, wie Sie Tupel statt Strings Sie gehofft bekommen. Entfernen Sie die Klammer nach print, dann werden Sie bekommen, was Sie wollen.

print(i,j) =>print i,j

Sie haben zweimal die erwartete Ausgabe, weil Ihr für Schleifen überprüfen jedes Element in den Listen zweimal.

Ein einfacherer Weg als in der anderen Antwort erwähnt ist die Verwendung des Moduls set.

A =set(["1","2",.....]) 
B =set(["2","3",.....]) 
set.intersection(A,B) 

BTW, vermeiden Sie list als Ihren Variablennamen. Das ist ein erhaltenes Wort.

0

Sie können wie diese

results = list(filter(lambda x: x in dict,list)) 
Verwandte Themen