2011-01-11 17 views
40

Parece que Python tendría un atajo. Quiero añadir un elemento a una lista de N veces, efectivamente haciendo esto:Python: añada el elemento a la lista N veces

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

Parecería a mí que no debería ser un método "optimizado" para eso, algo como:

l.append_multiple(x, 100) 

¿Esta ahí?

+3

Terminé yendo con 'l.extend ([x] * 100)' porque se ajustaba mejor a mi situación. Amber obtiene el crédito de respuesta por ser el más completo. ¡Gracias! – Toji

+4

Asegúrese de comprender la semántica de referencia de Python antes de usar esto para algo no trivial. Las x adjuntas a l son todas iguales x, por lo que mutar a una de ellas las afecta a todas (todas ellas, referidas a 100 veces). –

+0

Para aclarar: lo estoy usando para enteros, por lo que mi uso es seguro. – Toji

Respuesta

59

Para los tipos de datos inmutables:

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

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

Para valores que son almacenados por referencia y es posible que desee modificar más adelante (como sub-listas o dicts):

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

(la razón por la cual el primer método sólo es una buena idea para los valores constantes, lik etsts o strings, es porque solo hace una copia superficial al usar la sintaxis <list>*<number>, y por lo tanto, si hiciera algo como [{}]*100, terminaría con 100 referencias al mismo diccionario, por lo que cambiar uno de ellos los cambiaría a todos . Como los enteros y las cadenas son inmutables, esto no es un problema para ellos.)

Si desea agregar a una lista existente, puede usar el método extend() de esa lista (junto con la generación de una lista de cosas para agregar a través de las técnicas anteriores):

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

@smihael er, sí, ¿verdad? http://ideone.com/SFFARE – Amber

+0

O combine ambas sugerencias en la forma de 'a.extend (b * n)' donde 'n' es las veces que desea repetir elementos en b – DarkCygnus

3

Se puede hacer esto con una lista por comprensión

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

Use extender para agregar una lista de comprensión hasta el final.

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

Consulte el Python docs para obtener más información.

4

Itertools repeat combined with list extend.

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

Tenía que ir a otra ruta para una tarea, pero esto es con lo que terminé.

my_array += ([x] * repeated_times) 
Cuestiones relacionadas