No puedo descifrar el código para hacer esto, hay publicaciones similares: Repetición de elementos en la lista de comprensión
pero quiero repetir un valor en la lista por el valor en la lista
In [219]: l = [3,1] [i for x in range(i) for i in l] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () 1 l = [3,1] 2 ----> 3 [i for x in range(i) for i in l] TypeError: 'tuple' object cannot be interpreted as an integer
Lo que quiero es una lista como esta:
[3,3,3,1]
También puede alguien explicar el error.
Tenga en cuenta que estoy ejecutando Python 3.3 aquí
[x for x in l for _ in range(x)] # Out[5]: [3, 3, 3, 1]
Pero prefiero funciones más verbosas, pero más directas (literales) de itertools:
from itertools import chain, repeat list(chain.from_iterable(repeat(x, x) for x in l))
Otra solución más.
l = [3,1] ll = reduce(lambda a, b: a + [b] * b, l, []) print ll