Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用列表理解来删除彼此相差10以内的值,只保留1?_Python_List_Python 2.7_List Comprehension_Python 2.x - Fatal编程技术网

Python 如何使用列表理解来删除彼此相差10以内的值,只保留1?

Python 如何使用列表理解来删除彼此相差10以内的值,只保留1?,python,list,python-2.7,list-comprehension,python-2.x,Python,List,Python 2.7,List Comprehension,Python 2.x,我的清单如下: [[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]] 我想使用列表理解来删除彼此之间在10以内的项 以下是我迄今为止所尝试的: >>> lst = [item for item in lst for i in range(len(lst)) if item[i+1] - item[i] > 10] Traceback (mos

我的清单如下:

[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
我想使用列表理解来删除彼此之间在10以内的项

以下是我迄今为止所尝试的:

>>> lst = [item for item in lst for i in range(len(lst)) if item[i+1] - item[i] > 10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 
我的意思是,如果
a
-
b
的绝对值大于10,则彼此之间的距离不超过10

我想让它为彼此相差10以内的所有值返回1个值。

您在这里走到末尾--最后一个条目的原始列表之外是I+1:

for i in range(len(lst)) if item[i+1]
如果您只需执行
len(lst)-1


另一种方法是不使用列表理解,而是使用普通的for,并检查更多的条件。

您可以这样做

a=[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
result=[]
diff=10
num=0
for i in a:
    if abs(i[0]-num)<10:
        if i[0]>num:
            result.append(i)
            num=i[0]
    else:
        result.append(i)
        num=i[0]


print result
a=[[454.0,82]、[451.0,82]、[449.5,82]、[448.0,82]、[316.0,82]、[313.0,82]、[311.5,82]]
结果=[]
差值=10
num=0
对于我来说,在一个:
如果abs(i[0]-num)num:
结果.追加(i)
num=i[0]
其他:
结果.追加(i)
num=i[0]
打印结果

输出:[[454.0,82],[316.0,82]

你能更清楚地解释一下相互之间在10以内的项目是什么意思吗?好的,没问题,检查我的编辑为什么你认为python会为你找到欧几里德标准?@aj8uppal a和b是什么,确切地说?似乎建议的输出应该为空,因为对于示例中的任何元素,距离10.0Yes内还有另一个元素。但是我怎样才能把它做成一行呢?(列表理解)
a=[[454.0, 82], [451.0, 82], [449.5, 82], [448.0, 82], [316.0, 82], [313.0, 82], [311.5, 82]]
result=[]
diff=10
num=0
for i in a:
    if abs(i[0]-num)<10:
        if i[0]>num:
            result.append(i)
            num=i[0]
    else:
        result.append(i)
        num=i[0]


print result