Se le liste possono essere grandi, il suo meglio per convertirli in set e utilizzare intersezione su di loro:
list1 = ['a', 'b', 'c']
list2 = ['a', 'stack', 'overflow']
for i in set(list1).intersection(set(list2)):
print i
Nel caso in cui si desidera iterare su quell'incrocio ripetutamente, salvarla in una variabile della propria (intersect = set(list1).intersection(set(list2))
).
Si potrebbe anche usare:
for i in list 1:
if i in list2:
print i
ma il problema di utilizzare in
in un elenco per la verifica di appartenenza è che può essere un'operazione O(n)
, quindi nel complesso, il ciclo diventa O (n^2). OTOH, usando in
su un set
per l'iscrizione è O (1), quindi è molto più veloce.
Per quanto riguarda la tua domanda iniziale, quando lo fai for i in list1 and list2
, viene interpretato come for i in (list1 and list2)
, e il valore di list1 and list2
è semplicemente lista2 se lista1 non è vuoto, così si finisce per iterare su solo il secondo elenco.
fonte
2015-04-05 02:38:47
'' 'per i in elenco 1: se in elenco2: stampa i''' – wwii