Python: Tambahkan item ke daftar N kali

91

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?

Toji
sumber
9
Akhirnya pergi dengan l.extend([x] * 100)karena itu paling sesuai dengan situasi saya. Amber mendapat pujian karena menjadi yang paling komprehensif. Terima kasih!
Toji
4
Pastikan Anda memahami semantik referensi Python sebelum menggunakan ini untuk sesuatu yang tidak sepele. X yang ditambahkan ke l semuanya x yang sama, jadi mutasi salah satu dari mereka mempengaruhi semuanya (semuanya, disebut 100 kali).
Karl Knechtel
1
Untuk klarifikasi: Saya menggunakannya untuk integer, jadi penggunaan saya aman.
Toji

Jawaban:

132

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]
Amber
sumber
1
Atau gabungkan kedua saran ke dalam bentuk di a.extend(b*n)mana nadalah waktu yang Anda inginkan untuk mengulangi elemen dalam b
DarkCygnus
26

Gunakan perpanjang untuk menambahkan pemahaman daftar sampai akhir.

l.extend([x for i in range(100)])

Lihat dokumen Python untuk informasi lebih lanjut.

Jake
sumber
6

Saya harus pergi ke rute lain untuk sebuah tugas tetapi inilah yang akhirnya saya dapatkan.

my_array += ([x] * repeated_times)
CTS_AE
sumber
5

Ulangi Itertools dikombinasikan dengan perluasan daftar.

from itertools import repeat
l = []
l.extend(repeat(x, 100))
kevpie
sumber
3

Anda dapat melakukan ini dengan pemahaman daftar

l = [x for i in range(10)];
Mark Elliot
sumber
0
l = []
x = 0
l.extend([x]*100)
Rajan saha Raju
sumber