2013-03-31 12 views

Odpowiedz

14
if ele not in lista and ele not in listb: 
    # do stuff 

lub

if ele not in lista + listb: 
    # do stuff 

ale druga opcja będzie obejmować listy konkatenacji, które mogą potencjalnie powodować problemy z pamięcią z dużymi listach, również będzie musiał przejść na liście dwukrotnie. Aby zaradzić tej sytuacji można użyć itertools:

from itertools import chain 
if ele not in chain(lista, listb): 
    # do stuff 

Jeśli będzie stale sprawdzając członkostwa, chcesz zostać z użyciem set który ma O(1) (zamortyzowanego) odnośnika zamiast O(n) na listach.

np.

items_set = set(chain(lista, listb)) 
if ele in items_set: # this membership check will be a lot faster 
    # do stuff 
+0

I próbowałem "nie w" i nie powiodło się. Spróbuję "+" – user2084666

+0

"+" działało, dziękuję bardzo! – user2084666

+1

@ user2084666 Czy wypróbowałeś pierwszą opcję dosłownie? To co napisałeś, 'if ele not in lista i listb', jest w rzeczywistości błędne i stosuje logikę boolowską Pythona, możesz to sprawdzić, jeśli chcesz, ale sposób, w jaki napisałem, faktycznie działa – jamylak

2
if ele not in lista and ele not in listb: 
0

późno, ale chciałem tylko dodać trochę więcej fajnych rzeczy

zakładając obie listy są równej długości

a = [1,2,3,4,5] 
b = [6,7,8,9,10] 
c = all("h" not in pair for pair in zip(a,b)) 

jeśli są nierównej długości:

from itertools import zip_longest 

a = [1,2,3,4,5] 
b = [6,7,8,9,10,11,12,13] 
c = all("h" not in pair for pair in zip_longest(a,b)) 
Powiązane problemy