将列表元素重复 n 次
我想知道怎么把一个列表里的每个元素重复 n
次,然后形成一个新的列表。比如说:
x = [1,2,3,4]
n = 3
x1 = [1,1,1,2,2,2,3,3,3,4,4,4]
x * n
这个方法不行
for i in x[i]:
x1 = n * x[i]
应该有一种简单又聪明的方法。
14 个回答
10
这里可以使用嵌套的列表推导:
>>> [i for i in range(10) for _ in xrange(3)]
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9]
或者用你的例子:
>>> x = [1, 2, 3, 4]
>>> n = 3
>>> [i for i in x for _ in xrange(n)]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
19
有一个更简单的方法来实现这个功能,就是把列表 x
乘以 n
,然后对得到的列表进行排序。比如:
>>> x = [1,2,3,4]
>>> n = 3
>>> a = sorted(x*n)
>>> a
>>> [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
67
你可以使用列表推导式:
[item for item in x for i in range(n)]
>>> x = [1, 2, 3, 4]
>>> n = 3
>>> new = [item for item in x for i in range(n)]
#[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
159
最理想的方法可能是 numpy.repeat
:
In [16]:
import numpy as np
x1=[1,2,3,4]
In [17]:
np.repeat(x1,3)
Out[17]:
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])
69
如果你真的想要结果是一个列表,而生成器不够用的话:
import itertools
lst = range(1,5)
list(itertools.chain.from_iterable(itertools.repeat(x, 3) for x in lst))
Out[8]: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]