2016-11-04 42 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'] 
相關問題