Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Dizionario vs Lista

B
Benigno (1020 points)
9 17 28
in Programmare in Python by (1.0k points)
Come da titolo, qual è più efficiente tra i due? Il contesto è il seguente :

cercare un valore dato una chiave, nel caso del dizionario, e un indice, nel caso della lista.

Mi chiedevo se entrambe le operazioni fossero in O(1) e soprattutto se il dizionario fosse più pesante da gestire e tenere in memoria.
940 views
closed

2 Answers

Best answer
Tom Grobusch (13960 points)
2 2 10
by (14.0k points)
selected by
Bhe in realtà sono uguali, la lista è praticamente un dizionario, solo che i keys sono sempre 0,1,2,3..... Quindi se già devi avere un dizionario con le chiavi così ti consiglio una lista, anche perchè provando un po' con %timeit mi sembra un po' più veloce la lista, ma veramente di pochi ns. Ma se ti serve trovare per esempio gli indici degli elementi di una lista, puoi fare il contrario nel dizionario, mettendo come chiavi gli elementi della lista e come valori gli indici.
E
Edward (25950 points)
4 4 172
by (26.0k points)
Mi ero posto anche io questa domanda. Con dei test fatti con timeit ho riscontrato non ci siano differenze in termini di tempo tra i due casi.
plm (18850 points)
13 15 118
by (18.9k points)
Quindi con le liste passare tutte e 16 i test è possibile, ma bisogna fare un ottimo codice immagino
fc-dev (16450 points)
16 20 34
by (16.5k points)
In realtà farlo usando solo liste è praticamente impossibile dato che già solo rimuovere i piloti dalla lista ti manderebbe in timeout sul test con tutte le eliminazioni.
(E in questo non sto considerando che il problema principale in realtà è la lentezza della ricerca della posizione del pilota nella lista)
B
Babby740 (1240 points)
24 35 39
by (1.2k points)
Io l'ho fatto usando solo le liste e passa ne 15. l'unico che non riesco a passare è il test_1_esempio5 (istanza da 1500) perchè in questo test la lista degli eventi supera il milione, quindi anche utilizzando un algoritmo in O(n) devo comunque ciclare una lista da un milione.