Stavo scrivendo una funzione Python che sembrava qualcosa di simileQual è la complessità di runtime delle funzioni di elenco Python?
def foo(some_list):
for i in range(0, len(some_list)):
bar(some_list[i], i)
in modo che è stato chiamato con
x = [0, 1, 2, 3, ... ]
foo(x)
ho dato per scontato che l'accesso indice delle liste era O(1)
, ma è stato sorpreso di scoprire che per le liste di grandi dimensioni questo è stato significativamente più lento di quanto mi aspettassi.
La mia domanda, allora, è come sono liste di Python sono implementati, e qual è la complessità di esecuzione dei seguenti
- indicizzazione:
list[x]
- Popping dalla fine:
list.pop()
- Popping dal inizio:
list.pop(0)
- Estendere la lista:
list.append(x)
Per crediti extra, splicing o pop arbitrari.
Perdona la mia ignoranza, ma dov'è la complessità per 'pop()' in quella pagina? – Zaz
@Zaz, pop() senza indice è O (1), con indice, ad es. il primo nella lista, è O (n). dal momento che è necessario ottenere l'elemento O (1) e quindi eliminarlo. Quest'ultimo richiede O (n) di tempo per organizzare tutti gli altri elementi della lista. Maggiori informazioni su questo qui: https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt –