[英]Calculate the difference of list elements if more than one element in the list is not zero
[英]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.