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.

range in python 3.6

r
rosario.salerno (3010 points)
15 30 44
in Programmare in Python by (3.0k points)
closed by

Ho un problema con la funzione range in ipython 3.6, purtroppo qualsiasi cosa faccia non riesce a produrre il range numerico :
se faccio lst = range(15) ottengo in Out range(0, 15)
se faccio lst = list(range(15)) o lst =list(range(0,15)) 
ottengo "list" object is not callable.
Come posso ottenere una cosa analoga a questo che accadeva in python 2.x?

range(10)==>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
996 views
closed with the note: answered

3 Answers

Best answer
m
matteo.chiari (3650 points)
2 17 30
by (3.7k points)
selected by

Ciao,

in python 3.6 range restituisce un generatore invece che la lista completa degli elementi generati (in questo modo viene risparmiata memoria, dato che non c'è bisogno di creare l'intera lista in memoria). Se vuoi la lista intera, devi usare la funzione list() sul range(), ma tieni a mente che potresti incorrere in problemi di memoria se la lista è troppo grande.

L'errore che vedi è probabilmente dovuto al fatto che hai dichiarato una variabile usando il nome list, andando a sovrascrivere la sua funzionalità originale.

list qui ha ancora il suo valore originale di funzione

x = range(15)
list(x)

>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

# puoi fare anche direttamente list(range(15)), il risultato è lo stesso

 

# ora invece list è una variabile che contiene una lista

list = [1, 2, 3]

x = range(15)

list(x)
>> TypeError: 'list' object is not callable

# anche qui facendo direttamente list(range(15)) il risultato non sarebbe cambiato, perchè a questo punto list non è più una funziona ma una lista

francesco.dev (33560 points)
23 51 129
by (33.6k points)
Ottima risposta Matteo! :)
m
matteo.chiari (3650 points)
2 17 30
by (3.7k points)
Grazie, temevo di aver fatto un po' di confusione e di non essere stato molto chiaro :)
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Mi è bastato leggerla una volta per capire la tua soluzione, quindi hai fatto un buon lavoro!
Se posso permettermi ti consiglio di inserire un esempio in cui una lista contiene l'uso della funzione list()  su range(), affinché Rosario possa capire al meglio.
Buona giornata :)
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
Ciao Matteo,  effettivamente utilizzando list(x) dopo aver dichiarato che x =range(0,15) mi da la lista di numeri contenuti nel range da 0 a 15. Ti ringrazio!
G
GiorgioAgosta (2880 points)
6 24 42
by (2.9k points)
Ciao, se vuoi ottenere una lista di numeri da 0 a N come quella indicata puoi usare questa list comprehension :

Lista = [x for x in range( num ) ]


Non è il metodo migliore ma alle strette funziona XD

Spero di esserti stato d aiuto!
G
GiuseppeLaRocca (1170 points)
4 15 28
by (1.2k points)
Se la lista è già stata dichiarata, puoi utilizzare lst+=range(15) che andrà ad aggiungere tutti i valori del range.