Silakan pertimbangkan kode berikut:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
print j
Output (Python 2.6.6 pada Win 7 32-bit) adalah:
> Traceback (most recent call last):
> j[k] = l IndexError: list assignment index out of range
Saya kira itu adalah sesuatu yang sederhana yang tidak saya mengerti. Bisakah seseorang membersihkannya?
append
adalah solusi yang tepat untuk kasus penggunaan Anda, namun ada metode penyisipan pada daftar python yang dapat menyisipkan langsung ke posisi ke-i dalam daftar.j.insert(k, l)
Jawaban:
j
adalah daftar kosong, tetapi Anda mencoba menulis ke elemen[0]
di iterasi pertama, yang belum ada.Coba yang berikut ini sebagai gantinya, untuk menambahkan elemen baru ke akhir daftar:
Tentu saja, Anda tidak akan pernah melakukan ini dalam praktik jika yang Anda inginkan adalah menyalin daftar yang ada. Anda baru saja melakukannya:
Sebagai alternatif, jika Anda ingin menggunakan daftar Python seperti array dalam bahasa lain, maka Anda bisa membuat daftar sebelumnya dengan elemen-elemennya diatur ke nilai nol (
None
dalam contoh di bawah), dan kemudian, menimpa nilai di posisi tertentu:Yang perlu disadari adalah bahwa suatu
list
objek tidak akan memungkinkan Anda untuk menetapkan nilai pada indeks yang tidak ada.sumber
Pilihan Anda yang lain adalah menginisialisasi
j
:sumber
Lakukan
j.append(l)
alih-alihj[k] = l
dan hindarik
sama sekali.sumber
j+=[l]
.append
jauh lebih umum (mungkin karena suatu alasan - saya pikir ini sedikit lebih mudah untuk dipahami), tidak terlalu unggul dengan cara apapun. (Sunting @khachik: Tidak,+=
modifikasi di tempat)Anda juga bisa menggunakan pemahaman daftar:
atau buat salinannya menggunakan pernyataan:
sumber
Juga hindari menggunakan huruf kecil "L's" karena mudah bagi mereka untuk menjadi bingung dengan 1's
sumber
Saya pikir metode memasukkan Python adalah apa yang Anda cari:
Elemen sisipan x pada posisi i. list.insert (i, x)
sumber
insert
kapanappend
disediakan khusus untuk tujuan ini.[1, 20, 2, 3, 4, 5]
.Anda bisa menggunakan kamus (mirip dengan array asosiatif) untuk j
akan dicetak:
sumber
Satu lagi cara:
Dalam hal ini
j
akan menjadi array yang numpysumber
Mungkin Anda perlu memperpanjang ()
sumber