2011-01-11 18 views
40

To wydaje się być czymś, do czego Python miałby skrót. Chcę dołączyć element do listy N razy, skutecznie to robi:Python: Dołącz element do listy N razy

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

To wydaje mi się, że nie powinno być „zoptymalizowany” sposób, że coś takiego:

l.append_multiple(x, 100) 

Jest tu?

+3

Skończyło się na 'l.extend ([x] * 100)' ponieważ najlepiej pasuje do mojej sytuacji. Bursztyn dostaje odpowiedź jako najbardziej wszechstronną. Dzięki! – Toji

+4

Upewnij się, że rozumiesz podstawową semantykę Pythona, zanim użyjesz tego do niczego nietrywialnego. X-y dołączone do l są wszystkie takie same x, więc mutowanie jednego z nich wpływa na nich wszystkich (wszystkie z nich, o których mowa 100 razy). –

+0

Dla wyjaśnienia: używam go dla liczb całkowitych, więc moje użycie jest bezpieczne. – Toji

Odpowiedz

59

Do niezmiennych typów danych:

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

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

Dla wartości, które są przechowywane przez odniesienie i może chcesz zmodyfikować później (jak podlist lub dyktuje):

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

(Powód, dla którego pierwsza metoda to tylko dobry pomysł na wartości stałe, lik e lub ciągi, ponieważ tylko płytka kopia jest używana podczas używania składni <list>*<number>, a zatem jeśli zrobiłeś coś takiego jak [{}]*100, skończyłbyś z 100 odniesieniami do tego samego słownika - więc zmiana jednego z nich zmieniłaby je wszystkie . Ponieważ ints i string są niezmienne, nie stanowi to dla nich problemu.)

Jeśli chcesz dodać do istniejącej listy, możesz użyć metody extend() 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] 
+1

@smihael er, tak to robi? http://ideone.com/SffARE – Amber

+0

Lub połącz obie sugestie w formie 'a.extend (b * n)' gdzie 'n' to czasy, w których chcesz powtórzyć elementy w b – DarkCygnus

3

Można to zrobić z listowego

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

Użyj rozszerzenia, aby dodać listę do końca.

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

Zobacz Python docs aby uzyskać więcej informacji.

4

Powtórzenie Itertools w połączeniu z rozszerzeniem listy.

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

Musiałem iść inną drogą do zlecenia, ale to właśnie skończyłem.

my_array += ([x] * repeated_times)