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?


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]

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.


6

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

my_array += ([x] * repeated_times)

5

Ulangi Itertools dikombinasikan dengan perluasan daftar.

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

3

Anda dapat melakukan ini dengan pemahaman daftar

l = [x for i in range(10)];

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.