2010-10-05 25 views
9

Ho parecchie liste lunghe in python e li ho confrontati e trovo gli elenchi uguali tra loro tranne gli ultimi elementi in essi. Qual è il modo più veloce?Confronto degli elenchi Python

+0

Vuoi escludere l'ultimo elemento di ogni elenco o cercare prefissi comuni? –

risposta

8

Utilizzare qualcosa come if list1[:-1] == list2[:-1].

14

a[:-1] è una scorciatoia per "tutti gli elementi di a ma l'ultimo". Se è necessario escludere più di 1 elemento, modificare il numero 1 nel numero necessario.

a[:-1] == b[:-1] confronterà a e b senza i loro elementi finali.

Vedere this per ulteriori informazioni sull'affettatura.

1

per confrontare due liste, penso che qualcosa di simile sarebbe evitare di copiare qualsiasi parte del vostre liste, e si ferma non appena una mancata corrispondenza viene trovato:

len(a)==len(b) and all(a[i] == b[i] for i in range(len(a)-1)) 

trovare tutte le partite in un insieme arbitrario di liste , Penso che avresti bisogno di confrontare ogni coppia di liste - o almeno, ogni coppia che non hai controllato una versione equivalente di (ad esempio, se A = B e B = C, non è necessario controllare A = C). Non so a priori un algoritmo che renda questo semplice.

In alternativa, se le liste sono scandalosamente lunghe e si desidera evitare di attraversarle, è possibile calcolare un checksum dei primi elementi N-1 di ciascuno, quindi confrontare i checksum.

+1

In che modo calcolare un checksum evita di attraversare gli elenchi? – nmichaels

+0

Se è necessario confrontare ogni elenco con gli altri, si osservano gli attraversamenti di elenchi N * (N-1)/2. Se calcoli gli hash per ognuno, hai solo N traversali degli elenchi originali. A seconda del numero di elenchi "diversi" e di quanto sono lunghi gli "elenchi lunghi", ciò potrebbe evitare un sacco di attraversamenti! A condizione che il checksum sia abbastanza buono, comunque. – Ken

+0

Questa risposta potrebbe potenzialmente confrontare ogni elemento di un elenco con un altro della stessa lunghezza, non tutti tranne l'ultimo elemento, quindi non affronta la domanda. – martineau

Problemi correlati