簡體   English   中英

打印差異大於值的列表元素

[英]Print list elements with difference more than a value

我有一個Python清單。

x = [230, 235, 300, 480, 480, 506, 515, 516]

我想用數組x中的元素打印一個列表,其差異大於一個值(假設為10)。 因此,新列表將僅包含與下一個元素相差大於10的元素。 輸出列表應包含與給定列表中的相鄰元素相差超過10的元素。 輸出應為[230、300、480、516]的列表

我想要一個函數來實現這一點。

b = [0] + x
t = []
for i in range(len(b)-1):
    if(b[i+1]-b[i]>10):
        t.append(b[i])

print(t)

我試過了 但是我沒有得到正確的輸出。

使用numpy

import numpy as np
xarr = np.array(x)
result = xarr[np.where(np.diff(xarr) > 10)[0]+1]

生產:

array([300, 480, 506])

我相信這可能是您想要的?

您可以嘗試以下方法:

a=[230,235,300,480,480,506,515,516]
b=[0]+a
c=[]
for i in range(0,len(b)-1):
        if((b[i+1]-b[i])>10):
                c.append(b[i+1])
print(c)

輸出:

[230, 300, 480, 506]

嘗試這個:

print([k for k,v in zip(x, x[1:]) if abs(k-v) > 10])

zip是你的朋友。

注意:即使列表具有向上和向下的值(有時表示較大的值,有時較小的值)也可以使用,因為我使用abs

更新:

l=[(k,v) for k,v in zip(x[1:], x) if abs(k-v) >= 10]
print([list(zip(*l))[1][0]]+list(list(zip(*l))[0]))

努力獲得所需的輸出,現在是您的朋友。

使用迭代器:

import itertools
def gapFilter(l, gap_value):
  it1, it2 = itertools.tee(l)
  next(it2)
  return [x for x, y in zip(it1, it2) if abs(x-y) >= gap_value]

這里有現場示例

為了獲得初始0,只需在計算前將其附加到列表中即可。 Python3示例:

gapFilter([0, *x], 10)

暫無
暫無

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

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