簡體   English   中英

如何根據相鄰元素之間的差異將列表拆分為列表列表?

[英]How can I split a list into a list of lists based on the difference between adjacent elements?

比如,如果我有的話

MAX_ALLOWED_DIFF = 3
nums=[1, 2, 4, 10, 13, 2, 5, 5, 5]

輸出應該是

groups = [[1, 2, 4], [10, 13], [2, 5, 5, 5]]

上下文:我有一個pandas.Series object nums我用過

nums = nums.diff().gt(DETECTION_MAX_DIFF_NS).cumsum()).apply(list).tolist()

以相同的方式進行子樣本但是我注意到我的Series nums有很多重復項,在我使用.unique()方法之后我再也沒有Series對象了,我有numpy.ndarray (1D)代替。

我相信我可能會像pandas.Series(nums.unique)那樣使用但我不喜歡這個hack。

這是一種方法 -

>>> import numpy as np
>>> idx = np.r_[0,np.flatnonzero(np.abs(np.diff(nums))>MAX_ALLOWED_DIFF)+1,len(nums)]
>>> [nums[i:j] for (i,j) in zip(idx[:-1],idx[1:])]
[[1, 2, 4], [10, 13], [2, 5, 5, 5]]

所以我們使用drop_duplicates ,保持nums留在pd.Series

nums=nums.drop_duplicates()
nums.groupby(nums.diff().abs().gt(MAX_ALLOWED_DIFF).cumsum()).apply(list).tolist()
Out[447]: [[1, 2, 4], [10, 13], [5]]

鑒於你也標記了numpy ,這是一種方法:

thr = 3
ix = np.flatnonzero(np.concatenate([[False], np.abs(np.diff(nums))>thr]))
np.split(nums, ix)

產量

[array([1, 2, 4]), array([10, 13]), array([2, 5, 5, 5])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM