list.extender y listar comprensión

Cuando necesito agregar varios elementos idénticos a la lista, uso list.extend:

a = ['a', 'b', 'c'] a.extend(['d']*3) 

Resultado

 ['a', 'b', 'c', 'd', 'd', 'd'] 

Pero, ¿cómo hacer lo similar con la lista de comprensión?

 a = [['a',2], ['b',2], ['c',1]] [[x[0]]*x[1] for x in a] 

Resultado

 [['a', 'a'], ['b', 'b'], ['c']] 

Pero necesito este

 ['a', 'a', 'b', 'b', 'c'] 

¿Algunas ideas?

LCs astackdos.

 [y for x in a for y in [x[0]] * x[1]] 
 >>> a = [['a',2], ['b',2], ['c',1]] >>> [i for i, n in a for k in range(n)] ['a', 'a', 'b', 'b', 'c'] 

Un enfoque de itertools :

 import itertools def flatten(it): return itertools.chain.from_iterable(it) pairs = [['a',2], ['b',2], ['c',1]] flatten(itertools.repeat(item, times) for (item, times) in pairs) # ['a', 'a', 'b', 'b', 'c'] 

Si prefieres ampliar sobre las comprensiones de la lista:

 a = [] for x, y in l: a.extend([x]*y) 
 import operator a = [['a',2], ['b',2], ['c',1]] nums = [[x[0]]*x[1] for x in a] nums = reduce(operator.add, nums) 
 >>> a = [['a',2], ['b',2], ['c',1]] >>> sum([[item]*count for item,count in a],[]) ['a', 'a', 'b', 'b', 'c']