Python: Dołącz element do listy N razy

91

Wygląda na to, że Python miałby do tego skrót. Chcę dołączyć pozycję do listy N razy, skutecznie robiąc to:

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

Wydaje mi się, że powinna być do tego „zoptymalizowana” metoda, na przykład:

l.append_multiple(x, 100)

Jest tu?

Toji
źródło
9
Skończyło się na tym, l.extend([x] * 100)że najlepiej pasowało do mojej sytuacji. Amber otrzymuje odpowiedź za to, że jest najbardziej wszechstronny. Dzięki!
Toji
4
Upewnij się, że rozumiesz semantykę odwołań Pythona, zanim użyjesz tego do czegoś nietrywialnego. Wszystkie x dołączone do l są tym samym x, więc mutacja jednego z nich wpływa na wszystkie (wszystkie z nich, przywoływane 100 razy).
Karl Knechtel
1
Dla wyjaśnienia: używam go do liczb całkowitych, więc moje użycie jest bezpieczne.
Toji,

Odpowiedzi:

132

Niezmienne typy danych:

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

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

W przypadku wartości, które są przechowywane przez odniesienie i możesz chcieć zmodyfikować je później (np. Listy podrzędne lub dykty):

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

(Powodem, dla którego pierwsza metoda jest dobrym pomysłem tylko dla wartości stałych, takich jak ints lub stringi, jest to, że przy użyciu <list>*<number>składni robi się tylko płytka kopia , a zatem jeśli zrobiłeś coś podobnego [{}]*100, skończyłbyś z 100 odniesieniami do tego samego słownika - więc zmiana jednego z nich zmieniłaby je wszystkie. Ponieważ wartości typu int i string są niezmienne, nie stanowi to dla nich problemu).

Jeśli chcesz dodać coś do istniejącej listy, możesz użyć extend()metody tej listy (w połączeniu z generowaniem listy rzeczy do dodania za pomocą powyższych technik):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]
Bursztyn
źródło
1
Lub połącz obie sugestie w formie, a.extend(b*n)gdzie nsą czasy, w których chcesz powtórzyć elementy w b
DarkCygnus,
26

Użyj rozszerzenia, aby na końcu dodać tekst listy.

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

Więcej informacji można znaleźć w dokumentacji Pythona .

Jake
źródło
6

Musiałem wybrać inną trasę, aby wykonać zadanie, ale na tym skończyłem.

my_array += ([x] * repeated_times)
CTS_AE
źródło
5

Powtarzanie itertools w połączeniu z rozszerzaniem listy.

from itertools import repeat
l = []
l.extend(repeat(x, 100))
kevpie
źródło
3

Możesz to zrobić ze zrozumieniem listy

l = [x for i in range(10)];
Mark Elliot
źródło
0
l = []
x = 0
l.extend([x]*100)
Rajan saha Raju
źródło