Python: N kez listelemek için öğe ekle


91

Bu, Python'un kısayolunun olacağı bir şey gibi görünüyor. Bunu etkin bir şekilde yaparak N kez bir listeye bir öğe eklemek istiyorum:

l = []
x = 0
for i in range(100):
    l.append(x)

Bana öyle geliyor ki bunun için "optimize edilmiş" bir yöntem olmalı, şöyle bir şey:

l.append_multiple(x, 100)

Var mı?


9
Durumuma en l.extend([x] * 100)uygun olduğu için sona erdi . Amber, en kapsamlı olduğu için yanıt kredisini alır. Teşekkürler!
Toji

4
Önemsiz olmayan herhangi bir şey için kullanmadan önce Python'un referans anlamını anladığınızdan emin olun. L'ye eklenen x'lerin hepsi aynı x'tir, bu nedenle bunlardan birinin mutasyona uğratılması hepsini etkiler (hepsi 100 defa ifade edilir).
Karl Knechtel

1
Açıklama için: Tamsayılar için kullanıyorum, bu yüzden kullanımım güvenlidir.
Toji

Yanıtlar:


132

Değişmez veri türleri için:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

Referans olarak saklanan ve daha sonra değiştirmek isteyebileceğiniz değerler için (alt listeler veya dicts gibi):

l = [{} for x in range(100)]

(İlk yöntemin, tamsayılar veya dizeler gibi sabit değerler için iyi bir fikir olmasının nedeni, <list>*<number>sözdizimini kullanırken yalnızca yüzeysel bir kopyanın kullanılmasıdır ve bu nedenle, böyle bir şey [{}]*100yaparsanız, 100 referans elde edersiniz. aynı sözlüğe - bu yüzden birini değiştirmek hepsini değiştirir. İnts ve stringler değişmez olduğundan, bu onlar için bir problem değildir.)

Mevcut bir listeye eklemek istiyorsanız extend(), bu listenin yöntemini kullanabilirsiniz (yukarıdaki tekniklerle eklenecek şeylerin bir listesinin oluşturulmasıyla bağlantılı olarak):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

1
Veya forma her iki öneri birleştirmek a.extend(b*n)nerede nb tekrar elemanlarına istediğiniz katıdır
DarkCygnus

26

Sonuna bir liste anlayışı eklemek için uzatmayı kullanın.

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

Daha fazla bilgi için Python belgelerine bakın .


6

Bir görev için başka bir rotaya gitmem gerekiyordu ama bu benim son bulduğum şey.

my_array += ([x] * repeated_times)

5

Itertools, list extension ile birlikte tekrarlanır.

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

3

Bunu bir liste anlayışı ile yapabilirsin

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.