hice nota de esto en los comentarios, pero es más fácil de explicar en una respuesta entonces puedo dar ejemplos de código completo. Tenga en cuenta que esto es más una respuesta complementaria a los demás, en lugar de uno completo por derecho propio. Es simplemente una modificación para un caso específico.
Si necesita hacer esto con los objetos mutables, que con un obstáculo utilizando los otros métodos que se presentan aquí:
>>> l = [1,2,3,[4]]
>>> test = [it for it in l for _ in range(2)]
>>> test
[1, 1, 2, 2, 3, 3, [4], [4]]
>>> test[6].append(5)
>>> test
[1, 1, 2, 2, 3, 3, [4, 5], [4, 5]]
Como tal, es necesario utilizar copy.deepcopy()
si se quiere evitar este comportamiento.
>>> import copy
>>> l = [1,2,3,[4]]
>>> test = [copy.deepcopy(it) for it in l for _ in range(2)]
>>> test
[1, 1, 2, 2, 3, 3, [4], [4]]
>>> test[6].append(5)
>>> test
[1, 1, 2, 2, 3, 3, [4, 5], [4]]
Naturalmente, esto sólo es necesario para los objetos mutables en una lista, y sólo si se puede esperar que cambien después de crear la nueva lista.
es 'itertools' permitido? – jamylak
@jamylak '' itertools'' está en la biblioteca estándar, por lo que no usarlo sería una tontería. –
Además, ¿cómo desea que actúe? En este caso, son objetos inmutables, pero ¿cómo debería actuar en objetos mutables? –