2013-07-29 26 views
0

如何將列表劃分爲更小且不是均勻大小的區間,給出每個區間的理想初始值和最終值?將數組劃分爲不等大小的分區,給定每個分區應該開始或結束的位置,以python的形式

我有一個16383項目的列表。 I 有一個單獨的價值列表,每個間隔應該結束,下面應該輸入。

我需要使用給定的時間間隔來分配每個元素到它所屬的分區,這取決於它的值。

我曾嘗試閱讀的東西,但是當考慮到原來的列表中,人們把它分解成均勻大小的分區中我遇到的唯一的情況下...

感謝

布萊斯

+1

當你說「間隔」時 - 你是否有一個分區的運行長度,這樣每個分區都是一個接一個的,或者是一個分區的範圍... –

回答

2

如果我理解你,你需要類似的東西

>>> a = range(20) 
>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> i = [[1, 5], [5, 8], [8, 20]] 
>>> [a[x:y] for x, y in i] 
[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]] 

,或者如Jon Clements在評論中建議:

>>> [a[slice(*s)] for s in i] 
[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]] 
+2

你可以通過允許'slice',例如:'[a [slice(* s)] for s in'] –

+0

謝謝,我會去看看 –

0

你仍然可以使用切片:

>>> c = [0,3,5,10] 
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
>>> [l[c[i]:c[i+1]] for i in range(len(c)-1)] 
[[0, 1, 2], [3, 4], [5, 6, 7, 8, 9]] 
+0

好吧,也許我還不夠清楚: –

+0

你有個例子嗎? – jh314

0

只是一個多種變異:

a = range(20) 
b = [3, 5, 8, 17] 
map(lambda x, y: a[x : y], [0] + b, b) 

給出:

[[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16], [17, 18, 19]] 
0

通過列表理解,

>>> a = range(20) 
>>> b = [3, 5, 8, 17] 
>>> [a[x : y] for x, y in zip([0] + b[:-1], b)] 

說明:

[0] + b[:-1] 

[0, 3, 5, 8] 

然後

zip([0] + b[:-1], b) 

給出了邊界

[(0, 3), (3, 5), (5, 8), (8, 17)] 

最後通過列表解析迭代得到

[[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16]] 
0
  1. 對於每個範圍內的限制列表創建溢出值的空列表,以及一個與該列表中的最大值和該最小值一個元組列表中,最後一個將會有一個最大值無
  2. 對於值列表中的每個值都會遍歷您的圖點,直到找到值> min且最大值爲<或最大值爲無的值。
  3. 當您找到正確的列表後,將值附加到下一個。
相關問題