我有一个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)
我尝试过了。但是我没有得到正确的输出。
答案 0 :(得分:1)
使用controllerName/actionName?Area=MyAreaName
:
numpy
产生:
import numpy as np
xarr = np.array(x)
result = xarr[np.where(np.diff(xarr) > 10)[0]+1]
我相信这可能是您想要的吗?
答案 1 :(得分:1)
您可以尝试以下操作:
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]
答案 2 :(得分:0)
尝试一下:
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]))
努力获得想要的输出,现在是您的朋友。
答案 3 :(得分: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]
这里有live example
要获取初始0,只需在计算前将其附加到列表中即可。
Python3
示例:
gapFilter([0, *x], 10)