Come da aggiungere alla fine di una lista vuota?

Ho un elenco:

list1=[]

la lunghezza della lista è indeterminata, quindi sto cercando di aggiungere oggetti al fine di list1 come tale:

for i in range(0, n):

    list1=list1.append([i])

Ma la mia uscita tiene a dare questo errore: AttributeError: ‘NoneType’ oggetto non ha l’attributo ‘append’

È questo, perché list1 inizia con un elenco vuoto? Come posso risolvere questo errore?

  • N -1 per favore. Il fatto che append() restituisce Nessuno può ingannare ai principianti. La domanda è genuino.
InformationsquelleAutor LostLin | 2011-06-14

 

8 Replies
  1. 57

    append effettivamente modifiche elenco. Inoltre, ci vuole un voce, non una lista. Quindi, tutto ciò che serve è

    for i in range(n):
       list1.append(i)

    (A proposito, si noti che è possibile utilizzare range(n), in questo caso).

    Presumo che l’utilizzo effettivo che è più complicato, ma si può essere in grado di utilizzare un elenco di comprensione, che è più divinatori per questo:

    list1 = [i for i in range(n)]

    O, in questo caso, in Python 2.x range(n), infatti, crea l’elenco che si desidera già, anche se in Python 3.x, è necessario list(range(n)).

    • grazie che l’ultimo bit è stato molto utile e accorciato il mio codice da parte di un gruppo
    • che ne dite di una lista di liste?
    • Dipende da cosa si vuole fare. append aggiunge ultraperiferiche elenco, ma è possibile aggiungere a un elenco nidificato per indici: a[-1].append(3) aggiunge 3 all’ultimo sottoelenco di a.
  2. 16

    Non avete bisogno di un operatore di assegnazione. aggiungere restituisce Nessuno.

    • s/non necessario/non usare/
    • vuoto non esiste in python. il vuoto è in realtà niente
  3. 3

    append restituisce Nessuno, così, alla seconda iterazione si chiama metodo append di NoneType. Basta rimuovere l’assegnazione:

    for i in range(0, n):
        list1.append([i])
  4. 3

    Mikola ha la risposta giusta, ma un po ‘ più di una spiegazione. Verrà eseguita la prima volta, ma perché aggiungere restituisce None, dopo la prima iterazione del ciclo for, l’assegnazione sarà causa di list1 a parità di None e, pertanto, viene generato un errore nella seconda iterazione.

  5. 2

    Io personalmente preferisco il + operatore di append:

    for i in range(0, n):
    
        list1 += [[i]]

    Ma questo è la creazione di un nuovo elenco di ogni tempo, quindi potrebbe non essere la migliore, se la prestazione è fondamentale.

  6. 0

    Come Mikola detto, append() restituisce un void, quindi ogni iterazione si sta impostando list1 per un nonetype perché append è la restituzione di un nonetype. Sulla prossima iterazione, list1 è null, quindi si sta cercando di chiamare il metodo append di un valore null. Null non sono metodi, quindi il tuo errore.

  7. 0

    Si noti che è anche possibile utilizzare insert per inserire il numero nella posizione desiderata all’interno dell’elenco:

    initList = [1,2,3,4,5]
    initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]

    E, inoltre, che in python si può sempre ottenere un elenco di lunghezza utilizzando il metodo len()

  8. -1

    utilizzare my_list.append(…)
    e non usare e altri lista aggiungi lista sono modificabili.

    • Questa risposta è difficile da capire (non sono sicuro che cosa significa per voi la seconda parte, per esempio) e si ripete informazioni attuali di risposte (dal 2014) o (se preso alla lettera) è flat out sbagliato (OP codice non contiene my_list variabile).

Lascia un commento