列表推导根据元素值重复列表中的元素

-2 投票
2 回答
915 浏览
提问于 2025-04-18 16:12

我有点搞不清楚该怎么写代码来实现这个功能,网上有一些类似的帖子:在列表推导中重复元素

但是我想根据列表中的值来重复列表里的某个值

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里面那些更详细、但更直接(字面意思)的函数:

撰写回答