首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果差值大于某一值,则将连续数字保留在列表中。

如果差值大于某一值,则将连续数字保留在列表中。
EN

Stack Overflow用户
提问于 2019-11-13 05:25:40
回答 3查看 431关注 0票数 0

我希望在一个与X不同的列表中保留连续的值,假设我有这样的列表:

代码语言:javascript
复制
list = [1, 50, 70, 75, 100, 110] 

我想保留一个连续数字,它的差值是>= 20:

代码语言:javascript
复制
A = [1, 50, 70, 100] 

要做到这一点,我现在使用以下代码:

代码语言:javascript
复制
distance = 20
A = []
for i in (list):
    if not A or (i - A[-1]) >= distance:
        A.append(i)

还有其他方法可以用迭代工具或更多的迭代工具来实现吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-13 05:36:40

试着:

代码语言:javascript
复制
>>> arr = np.array([1, 50, 70, 75, 100, 110])
>>> mask = np.diff(arr) >= 20
>>> mask = np.insert(mask, 0, True)
>>> arr[mask]
array([  1,  50,  70, 100])
票数 2
EN

Stack Overflow用户

发布于 2019-11-13 05:38:13

对于list l,我们可以-

代码语言:javascript
复制
[l[0]]+[l[i] for i in range(1,len(l)) if l[i]-l[i-1]>=20]

对于数组a,它将是-

代码语言:javascript
复制
a[np.r_[True,np.diff(a)>=20]]

如果你想把差异看作是绝对的-

代码语言:javascript
复制
a[np.r_[True,np.abs(np.diff(a))>=20]
票数 2
EN

Stack Overflow用户

发布于 2019-11-13 06:03:53

具有简单的生成器功能:

代码语言:javascript
复制
def filter_diff(lst):
    v = lst[0]
    yield v
    for n in range(1, len(lst)):
        if lst[n] - v >= 20:
            v = lst[n]
            yield v

lst = [1, 50, 70, 75, 100, 110]
print(list(filter_diff(lst)))   # [1, 50, 70, 100]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58830798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档