Python: agregue el elemento a la lista N veces


91

Esto parece algo para lo que Python tendría un atajo. Quiero agregar un elemento a una lista N veces, efectivamente haciendo esto:

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

Me parecería que debería haber un método "optimizado" para eso, algo como:

l.append_multiple(x, 100)

¿Esta ahí?


9
Terminé yendo l.extend([x] * 100)porque encajaba mejor con mi situación. Amber recibe el crédito de respuesta por ser la más completa. ¡Gracias!
Toji

4
Asegúrese de comprender la semántica de referencia de Python antes de usar esto para algo que no sea trivial. Las x añadidas a l son todas iguales, por lo que la mutación de una de ellas les afecta a todas (a todas, a las que se hace referencia 100 veces).
Karl Knechtel

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

Respuestas:


132

Para tipos de datos inmutables:

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

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

Para valores que se almacenan por referencia y es posible que desee modificarlos más tarde (como sublistas o dictados):

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

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

Si desea agregar a una lista existente, puede usar el extend()método de esa lista (junto con la generación de una lista de cosas para agregar mediante 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
O combine ambas sugerencias en la forma de a.extend(b*n)dónde nson las veces que desea repetir elementos en b
DarkCygnus

26

Utilice extender para agregar una lista de comprensión al final.

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

Consulte los documentos de Python para obtener más información.


6

Tuve que ir por otra ruta para una tarea, pero esto es lo que terminé con.

my_array += ([x] * repeated_times)

5

Itertools se repite combinada con la extensión de lista.

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

3

Podrías hacer esto con una lista de comprensión

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.