列表推导根据元素值重复列表中的元素
我有点搞不清楚该怎么写代码来实现这个功能,网上有一些类似的帖子:在列表推导中重复元素
但是我想根据列表中的值来重复列表里的某个值
In [219]:
l = [3,1]
[i for x in range(i) for i in l]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-219-84d6f25dfd96> in <module>()
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
我想要的列表应该是这样的:
[3,3,3,1]
另外,有人能解释一下这个错误吗?
注意,我这里使用的是Python 3.3
2 个回答
0
又一个解决方案。
l = [3,1]
ll = reduce(lambda a, b: a + [b] * b, l, [])
print ll
3
[x for x in l for _ in range(x)]
# Out[5]: [3, 3, 3, 1]
from itertools import chain, repeat
list(chain.from_iterable(repeat(x, x) for x in l))
不过我更喜欢itertools里面那些更详细、但更直接(字面意思)的函数: