2016-11-04 63 views
1

我想知道如何复制任意时间的列表中的每个元素,例如复制任意时间的列表中的每个元素

l = ['a', 'b', 'c'] 

l结果的重复元素在一个新的列表,

n = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c'] 

所以 'A' 已经被重复3次, 'B' 一次, 'C' 的两倍。每个元素的重复数量由numpy.random.poissonnumpy.random.poisson(2)

回答

2

下面是使用np.repeat创建一个数组一个NumPy的基于矢量的方法 - 如果你需要一个列表作为输出

np.repeat(l, np.random.poisson([2]*len(l))) 

,追加.tolist()有 -

np.repeat(l, np.random.poisson([2]*len(l))).tolist() 

如果你想保持在每个元素至少有一个条目,在np.random.poisson([2]*len(arr)).clip(min=1)处添加一个裁剪。

+0

我刚刚意识到'np.random.poisson(2)'可能等于'0',但我喜欢将每个元素保留在列表中,如果有'np.random.poisson ([2])'是'0',如何避免它? – daiyue

+0

@daiyue添加注释以避免这种情况。 – Divakar

1

乘法与join它再喂它从numpy.random.poisson(2)返回的值,所述列表中的每个元素到list

r = list(''.join(i*random.poisson(2) for i in l)) 

对于一个运行,该随机产生:

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

由于你可以使用np,我会选择Divakar的解决方案(对于比你的例子更大的列表,执行速度更快)。

1
>>> l = ['a', 'b', 'c'] 
>>> n = [] 
>>> for e in l: 
...  n.extend([e] * numpy.random.poisson(2)) 
... 
>>> n 
['a', 'a', 'b', 'c'] 
相关问题