Pagina 1 di 1
[Risolt][Pytho]Appendere a lista di liste inizialmente vuota
Inviato: giovedì 15 maggio 2014, 11:05
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?
Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: giovedì 15 maggio 2014, 11:42
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]]
>>>
Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: giovedì 15 maggio 2014, 12:32
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!
Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: giovedì 15 maggio 2014, 12:37
da Claudio_F
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.
Per indicare una tupla bisognerebbe scrivere:
Codice: Seleziona tutto
>>> a=123
>>>
>>> a == (a)
True
>>> a == (a,)
False
>>> type((a))
<type 'int'>
>>> type((a,))
<type 'tuple'>
Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: venerdì 16 maggio 2014, 3:10
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
dovrei scrivere:
?
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...

Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: venerdì 16 maggio 2014, 10:35
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):
Re: [Python] Appendere a lista di liste inizialmente vuota
Inviato: mercoledì 21 maggio 2014, 3:59
da MagOsTranO93
Ok, grazie mille!
