2015-04-05 12 views

risposta

5

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.

+0

@ mu 無 crea effetti collaterali? – AlanH

+0

@AlanH Ho aggiunto qualche spiegazione in più, dai un'occhiata. Se la risposta ti aiuta, non dimenticare di accettare e revocare l'autorizzazione :) –

+0

grazie per la risposta Cheers. –

Problemi correlati