Problema nelle liste

Neo (6720 points)
6 27 37
asked Oct 20, 2017 in Programmare in Python by Neo (6,720 points)

Buona sera a tutti!

Durante la scrittura degli homework mi sto imbattendo sempre nel solito problema... Quando converto una variabile in lista a quest'ultima vengono aggiunti n elementi vuoti o con delle "," senza che ne capisca il motivo! Se infatti ad esempio provo a trasformare una variabile che mi viene data in return in una funzione precedente in lista ---> Lista = list(Variabile_return) dove Variabile_return = ciao quest'ultima mi viene fornita come Lista = [" ", "," " ", " ", "c", "i", " ", "a", "o"] (E' un esempio! Ma la scrittura in output è pressochè simile) Avete qualche idea sul motivo?

201 views

5 Answers

Best answer
andrea.sterbini (172780 points)
513 935 1789
answered Oct 20, 2017 by andrea.sterbini (172,780 points)
selected Oct 21, 2017 by Neo
Se al costruttore di liste list() passi un oggetto iterabile (in questo caso una stringa), ti viene fuori una lista degli elementi che stanno nell'oggetto, in questo caso i caratteri della stringa.
Neo (6720 points)
6 27 37
commented Oct 20, 2017 by Neo (6,720 points)
Ma se il return Variabile1 della funzione precedente mi da in output il messaggio "Ciao" e nella funzione successiva inizializzo una nuova variabile a quel valore trasformato in lista cosa potrebbe generare quegli elementi "randomici"? Mi sta sorgendo anche un dubbio, non è che sbagli nell'inizializzare la variabile? Variabile1_trasformata = list(Nome_funzione_contenente_variabile1) o Variabile1_trasformata = list(Variabile1)? Il secondo metodo non dovrebbe essere sbagliato?
andrea.sterbini (172780 points)
513 935 1789
commented Oct 20, 2017 by andrea.sterbini (172,780 points)
Se ho capito bene, quello che vuoi fare è "costruire una lista che ha come unico elemento il valore della variabile".
Prova con
[variabile]
Neo (6720 points)
6 27 37
commented Oct 21, 2017 by Neo (6,720 points)
Ho risolto riflettendo sulla vostra risposta, grazie mille!
answered Oct 20, 2017 by Anon1 (9,920 points)

Ciao, hai controllato la presenza di spazi nella stringa di ritorno? Perché la funzione list() converte in elemento anche gli spazi oltre ai caratteri alfanumerici!

Neo (6720 points)
6 27 37
commented Oct 20, 2017 by Neo (6,720 points)
Ho controllato tramite opportuni print, prima e dopo, il contenuto della variabile! Eppure nella variabile di partenza non ce ne sono...
m
moin.uddin (820 points)
3 10 19
answered Oct 20, 2017 by moin.uddin (820 points)
>>>s='lalala'
>>>sa=list(s)
>>>sa
['l', 'a', 'l', 'a', 'l']

ciao ho provato un esempio, mi sembra che funziona come dovrebbe, forse dovresti controllare la tua funzione di che ritorna il valore nel Lista = list(Variabile_return) =)

Neo (6720 points)
6 27 37
commented Oct 20, 2017 by Neo (6,720 points)
Si, la funzione "funziona" nel modo corretto! Il problema mi si presenta solo in questo specifico caso ossia nella trasformazione in lista di una variabile ottenuta da un'altra funzione
1794095 (990 points)
3 13 22
answered Oct 20, 2017 by 1794095 (990 points)
hai provato col 7-te
francesco.dev (33560 points)
14 51 129
answered Oct 20, 2017 by francesco.dev (33,560 points)

Ciao!
Hai provato ad utilizzare il metodo variabile.split()?

Te lo consiglio perché la funzione list crea una lista contenente ogni singolo carattere (nel caso di una stringa, quindi 'ciao' diventerà 'c' 'i' 'a' 'o'), invece il metodo split crea un unico elemento della lista contenente l'intera stringa!

Se non è questo il problema, ricorda di controllare anche il codice presente precedentemente e che la variabile che passi per usare la funzione list contenga realmente ciò che pensi contenga! Potrebbe essere che ti sei sbagliato sul suo contenuto. Ti consiglio di mettere qualche stampa (print) in punti cruciali per capire qual è il reale problema, perché fidati che tale funzione funziona alla perfezione!

Fammi sapere,
- Francesco Pio Scognamiglio

m
moin.uddin (820 points)
3 10 19
commented Oct 20, 2017 by moin.uddin (820 points)
però se hai una stringa più lunga ad esempio 'Hello World' usando il metodo split verrebbe :

s='HELLO WORLD'
s.split()
Out[8]: ['HELLO', 'WORLD']
francesco.dev (33560 points)
14 51 129
commented Oct 20, 2017 by francesco.dev (33,560 points)
Esattamente! Perché come parametro si può passare il carattere per cui si deve dividere la stringa (di default è, appunto, lo spazio)
Infatti se scrivessi:
s='ciao mondo'
s.split('m')
Out[8]: ['ciao ', 'ondo']
Neo (6720 points)
6 27 37
commented Oct 20, 2017 by Neo (6,720 points)
Conosco il metodo .split ma in questo caso mi occorreva esattamente la trasformazione in lista