[Risolt][Pytho]Appendere a lista di liste inizialmente vuota

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
MagOsTranO93
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1017
Iscrizione: lunedì 20 settembre 2010, 14:57
Distribuzione: Ubuntu 12.04.01 LTS, 64bit

[Risolt][Pytho]Appendere a lista di liste inizialmente vuota

Messaggio da MagOsTranO93 »

Ho una lista inizialmente vuota, a cui vorrei successivamente appendere altre liste.

Queste liste sono dati ciclici, sicche creando questa lista di liste, alla fine potro' calcolarne la deviazione standard.

Siccome gli elementi di questa lista di liste sono derivati da un ciclo if, ero partito con qualcosa del genere:

Codice: Seleziona tutto

if condition_whatever == True: 
    singlelist = *qualcosa diverso ad ogni ciclo*
    totalist = totalist.append(singlelist)
Ma, se totalist e' inizialmente vuota, come in questo caso, allora viene ritornato l'errore:

Codice: Seleziona tutto

AttributeError: 'NoneType' object has no attribute 'append'
Il che e' risaputo, ma ancora non ho trovato un modo per risovere nel caso di una lista di liste. Qualche suggerimento?
Ultima modifica di MagOsTranO93 il mercoledì 21 maggio 2014, 4:00, modificato 1 volta in totale.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da 1001001 »

Premesso che non sono esperto di python e che quindi non so se quello che sto per consigliarti sia considerato buono o cattivo python e soprattutto che, visto quanto ho appena detto, l'intervento di qualcuno più esperto di me è più che benvenuto :), io nel metodo append userei le parentesi tonde per trattare l'oggetto che stai inserendo come una tupla, in modo che sia vista come un singolo oggetto (che rimane comunque poi modificabile)

Codice: Seleziona tutto

mattia@replicant:~$ python
Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> list3 = [7, 8, 9]
>>> list_of_lists = []
>>> list_of_lists.append ((list1))
>>> list_of_lists.append ((list2))
>>> list_of_lists.append ((list3))
>>> list_of_lists
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list_of_lists [2][2]
9
>>> list_of_lists [2][2] = 10
>>> list_of_lists
[[1, 2, 3], [4, 5, 6], [7, 8, 10]]
>>> list_of_lists [2].append (4)
>>> list_of_lists
[[1, 2, 3], [4, 5, 6], [7, 8, 10, 4]]
>>>
"I find your lack of faith disturbing."
MagOsTranO93
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1017
Iscrizione: lunedì 20 settembre 2010, 14:57
Distribuzione: Ubuntu 12.04.01 LTS, 64bit

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da MagOsTranO93 »

Non ho provato la tua soluzione, ma il fatto di ricevere l'errore riportato (no attribute 'append') credo che prescinda da come tratto l'oggetto dell'attributo...
Infatti non so come sia possibile che a te non dia lo stesso errore (sigh).
Grazie comunque del suggerimento.

EDIT: provando in modalita' interattiva, neanche io ricevo l'errore!
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da Claudio_F »

Codice: Seleziona tutto

totalist = totalist.append(singlelist)
Il vero problema è che assegni al nome totalist il risultato della chiamata al metodo append della lista a cui inizialmente si riferisce il nome totalist, quindi la lista la perdi e totalist si riferisce ad un oggetto nullo (None). Al secondo giro del ciclo totalist si riferisce all'oggetto nullo che non ha nessun metodo append e da qui l'errore riportato.

Codice: Seleziona tutto

list_of_lists.append ((list1))
Per indicare una tupla bisognerebbe scrivere:

Codice: Seleziona tutto

list_of_lists.append ((list1,))

Codice: Seleziona tutto

>>> a=123
>>> 
>>> a == (a)
True
>>> a == (a,)
False
>>> type((a))
<type 'int'>
>>> type((a,))
<type 'tuple'>
:ciao:
MagOsTranO93
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1017
Iscrizione: lunedì 20 settembre 2010, 14:57
Distribuzione: Ubuntu 12.04.01 LTS, 64bit

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da MagOsTranO93 »

Grazie Claudio!
Quindi invece di fare una "doppia assegnazione", mi basta usare il metodo 'append' sulla lista che voglio creare.
Riguardo all'ultima parte del commento, non ho capito molto: intendi che, anziche' usare

Codice: Seleziona tutto

    list_of_lists.append ((list1))
dovrei scrivere:

Codice: Seleziona tutto

    list_of_lists.append ((list1,))
?
Ho provato a stampare il type, e in tutti e due i casi ottengo una lista (il che mi va bene - credo -, ma non riesco a capire il tuo punto).
EDIT: in realta', e' una lista di array, e questo non so se mi va bene... :S
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da Claudio_F »

L'ultima parte riguarda solo la sintassi per fare l'append di una tupla, nel tuo caso non serve perché append inserisce già come singolo elemento l'oggetto che viene specificato (la sottolista).

Diverso sarebbe usare extend, che effettivamente spacchetta tutti gli elementi della sequenza da aggiungere accodandoli a quelli della sequenza da "ingrandire", in tal caso queste due righe ottengono lo stesso risultato (ma la seconda è inutilmente complicata):

Codice: Seleziona tutto

list_of_lists.append(new_list)

Codice: Seleziona tutto

list_of_lists.extend((new_list,))
:ciao:
MagOsTranO93
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1017
Iscrizione: lunedì 20 settembre 2010, 14:57
Distribuzione: Ubuntu 12.04.01 LTS, 64bit

Re: [Python] Appendere a lista di liste inizialmente vuota

Messaggio da MagOsTranO93 »

Ok, grazie mille! ;)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti