2017-03-21 2 views
-2

Ich muss eine Liste "A" von 100.000 Elementen durchlaufen. Aber ich muss einige von ihnen überspringen, insbesondere möchte ich die Elemente überspringen, die in eine andere Liste "B" geschrieben werden. Was ist der beste Weg, dies zu tun?Python: Wie durchläuft man eine Liste mit Ausnahme einiger Zahlen, die zu einer anderen Liste gehören?

+0

Machen Sie einen Satz von 'B', und prüfen Sie, ob jedes Element' in B' ist. – khelwood

+1

Haben Sie einen Code geschrieben? – elena

+1

'B = Satz (B); only_in_A = [x für x in A wenn x nicht in B] '... oder wenn mehrere wiederholte Werte in' A' egal sind, dann wandle 'A' in' set' um. – blacksite

Antwort

2

Sie einen Filter verwenden:

a = [0, 1, 2, 3, 4] 
b = [1, 2] 
list(filter(lambda el: el not in b, a)) 
# [0, 3, 4] 

Wenn Sie auf die Elemente iterieren müssen, fallen die list den Filter Einwickeln:

for el in filter(lambda el: el not in b, a): 
    do_something() 

Alternativ kann das gleiche mit einer Liste erreicht werden Verständnis, das im Wesentlichen das gleiche semantisch ist:

[el for el in a if el not in b] 
# [0, 3, 4] 

K Beachten Sie, dass Sie in beiden Versionen eine lineare Suche nach den Elementen von b durchführen. Wenn diese Liste ziemlich lang ist, kann dies sehr langsam werden. Eine effizientere Methode (wie in den Kommentaren vorgeschlagen) wäre, b statt einer Liste eine Menge zu machen. Dies erfordert nur, dass die Elemente von b hashable sind.

bset = set(b) 
[el for el in a if el not in bset] 
# [0, 3, 4] 
Verwandte Themen