如何將列表劃分爲更小且不是均勻大小的區間,給出每個區間的理想初始值和最終值?將數組劃分爲不等大小的分區,給定每個分區應該開始或結束的位置,以python的形式
我有一個16383項目的列表。 I 也有一個單獨的價值列表,每個間隔應該結束,下面應該輸入。
我需要使用給定的時間間隔來分配每個元素到它所屬的分區,這取決於它的值。
我曾嘗試閱讀的東西,但是當考慮到原來的列表中,人們把它分解成均勻大小的分區中我遇到的唯一的情況下...
感謝
布萊斯
如何將列表劃分爲更小且不是均勻大小的區間,給出每個區間的理想初始值和最終值?將數組劃分爲不等大小的分區,給定每個分區應該開始或結束的位置,以python的形式
我有一個16383項目的列表。 I 也有一個單獨的價值列表,每個間隔應該結束,下面應該輸入。
我需要使用給定的時間間隔來分配每個元素到它所屬的分區,這取決於它的值。
我曾嘗試閱讀的東西,但是當考慮到原來的列表中,人們把它分解成均勻大小的分區中我遇到的唯一的情況下...
感謝
布萊斯
如果我理解你,你需要類似的東西
>>> 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]]
你可以通過允許'slice',例如:'[a [slice(* s)] for s in'] –
謝謝,我會去看看 –
你仍然可以使用切片:
>>> 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]]
好吧,也許我還不夠清楚: –
你有個例子嗎? – jh314
只是一個多種變異:
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]]
通過列表理解,
>>> 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]]
當你說「間隔」時 - 你是否有一個分區的運行長度,這樣每個分區都是一個接一個的,或者是一個分區的範圍... –