2016-11-04 16 views
1

リスト内の各要素を任意の時間に複製する方法が不思議です。そうリストの各要素を任意の時間に複製する

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

新しいリストでl結果内の重複する要素に、

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

'' 二回、一回 'B'、3回複製された 'C'。各要素の重複数は、numpy.random.poissonによって決定される。 numpy.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() 

をあなたがで維持したい場合各要素に対して少なくとも1つのエントリがあり、そこには、np.random.poisson([2]*len(arr)).clip(min=1)でクリッピングを追加します。

+0

([2]) 'は' 0'ですか、それを避けるには? – daiyue

+0

@daiyueこのような場合を避けるためにメモを追加しました。 – Divakar

1

乗算listnumpy.random.poisson(2)から返された値、joinそれを、それを飼料と、リスト内の各要素:ので

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

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

1回のランの場合、これはランダムになりますいずれかの方法でnpを使用すると、私はDivakarのソリューション(あなたの例よりも大きなリストの方が速く実行されます)に行きます。私はちょうど `np.random.poisson場合` np.random.poisson(2) '' 0 'に等しいかもしれないが、私は、リストの各要素を維持したい、いくつかの要素が欠落してもよいことを理解

1
>>> l = ['a', 'b', 'c'] 
>>> n = [] 
>>> for e in l: 
...  n.extend([e] * numpy.random.poisson(2)) 
... 
>>> n 
['a', 'a', 'b', 'c'] 
関連する問題