Ini sepertinya sesuatu yang Python akan memiliki jalan pintas. Saya ingin menambahkan item ke daftar N kali, secara efektif melakukan ini:
l = []
x = 0
for i in range(100):
l.append(x)
Menurut saya, seharusnya ada metode yang "dioptimalkan" untuk itu, seperti:
l.append_multiple(x, 100)
Disana?
l.extend([x] * 100)
karena itu paling sesuai dengan situasi saya. Amber mendapat pujian karena menjadi yang paling komprehensif. Terima kasih!Jawaban:
Untuk tipe data yang tidak dapat diubah:
l = [0] * 100 # [0, 0, 0, 0, 0, ...] l = ['foo'] * 100 # ['foo', 'foo', 'foo', 'foo', ...]
Untuk nilai yang disimpan dengan referensi dan Anda mungkin ingin memodifikasi nanti (seperti sub-daftar, atau dicts):
l = [{} for x in range(100)]
(Alasan mengapa metode pertama hanya merupakan ide bagus untuk nilai konstan, seperti int atau string, adalah karena hanya salinan dangkal yang dilakukan saat menggunakan
<list>*<number>
sintaks, dan dengan demikian jika Anda melakukan hal seperti itu[{}]*100
, Anda akan mendapatkan 100 referensi ke kamus yang sama - jadi mengubah salah satunya akan mengubah semuanya. Karena int dan string tidak dapat diubah, ini bukan masalah bagi mereka.)Jika Anda ingin menambahkan ke daftar yang sudah ada, Anda dapat menggunakan
extend()
metode daftar itu (sehubungan dengan pembuatan daftar hal-hal yang akan ditambahkan melalui teknik di atas):a = [1,2,3] b = [4,5,6] a.extend(b) # a is now [1,2,3,4,5,6]
sumber
a.extend(b*n)
manan
adalah waktu yang Anda inginkan untuk mengulangi elemen dalam bGunakan perpanjang untuk menambahkan pemahaman daftar sampai akhir.
l.extend([x for i in range(100)])
Lihat dokumen Python untuk informasi lebih lanjut.
sumber
Saya harus pergi ke rute lain untuk sebuah tugas tetapi inilah yang akhirnya saya dapatkan.
sumber
Ulangi Itertools dikombinasikan dengan perluasan daftar.
from itertools import repeat l = [] l.extend(repeat(x, 100))
sumber
Anda dapat melakukan ini dengan pemahaman daftar
l = [x for i in range(10)];
sumber
l = [] x = 0 l.extend([x]*100)
sumber