2017-03-02 109 views
0

我搜索了很多答案,但我只能找到答案多次添加一個項目。或者只是乘以兩個列表。將多個項目追加到基於變量的列表中?

#ratio of bar 
ratio_variant1 = 0.1 
ratio_variant2 = 0.3 
ratio_variant3 = 0.4 
ratio_variant4 = 0.2 

ratio = [] 
ratio.extend([ratio_variant1, ratio_variant2, ratio_variant3, ratio_variant4]) 

#ratio to integer 
ratiointeger = [x*100 for x in ratio] 

#size of bar 
size_variant1 = 2 
size_variant2 = 3 
size_variant3 = 4 
size_variant4 = 6 

size = [] 
size.extend([size_variant1, size_variant2, size_variant3, size_variant4]) 

bucket = size * ratiointeger 

我怕我的創建率和尺寸列表的方式並不是真正的Python的,但主要的問題是,我不能做一個列表/桶:

10 items of 2 
30 items of 3 
40 items of 4 
20 items of 6 
+0

這是你想要的:'[2] * 10'給出了'[2,2,2,2,2,2,2,2,2,2]'? – Elmex80s

+0

或[Numpy Repeat](https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.repeat.html),'np.repeat'? –

+0

嗨,馬克,你可以更好地解釋你想要歸檔的東西嗎?預期產出應該是多少? –

回答

0

在我看來,你需要:

bucket = [x for l in ([s]*r for s, r in zip(size, ratiointeger)) for x in l] 

這將構建一個列表的列表,包含要重複的:

>>> [[s]*r for s, r in zip(size, ratiointeger)] 
[[2, 2, 2, 2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4], [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]] 

然後使用the method from this post拉平他們。

+0

這就是我所需要的,至少我不需要numPy。你是否也有建議以更Python化的方式創建比例和大小數組? –

+0

@MarcdenH老實說,我不知道你爲什麼要這樣寫,而不是比例整數= [x * 100在[0.1,0.3,0.4,0.2]]中的x]。我以爲你有一些理由。 – muru

+0

我認爲在將所有事情分開時都會出錯。這是爲了讓一切變得清晰,我需要多次改變比例和大小。所以這就是爲什麼我宣佈他們如此明確。 –

0

試試這個:

bucket = [[s] * int(r) for (s, r) in zip(size, ratiointeger)]

+0

它比其他答案更短,我可以使用扁平方法創建我想要的列表。 –

相關問題