在列表中,我想删除与上一个和下一个不同的元素(例如:差异大于 5)
n=[1913, 2048, 2049, 2050, 2052, 2052, 2054, 2055]
[x for x,y in zip(n,n[1:]) if y-x<5]
它几乎有效:它返回:[2048, 2049, 2050, 2052, 2052, 2054]
重点是最后一个元素被省略了。
有没有快速有效的方法来获取[2048, 2049, 2050, 2052, 2052, 2054, 2055]
提前致谢
多姆
最佳答案
zip
通常会一直工作,直到最小的可迭代对象耗尽为止。这就是为什么你的最后一个值被忽略的原因。我们可以使用 itertools.izip_longest
来修复这个问题,如果最短的迭代已用完,它默认返回 None
。
如果 y
为 None
,表达式为 y 或 x
,则我们取 x
本身的值。
from itertools import izip_longest as ex_zip
n = [1913, 2048, 2049, 2050, 2052, 2052, 2054, 2055]
print [x for x, y in ex_zip(n,n[1:]) if (y or x) - x < 5]
# [2048, 2049, 2050, 2052, 2052, 2054, 2055]
关于Python 将列表中的元素与上一个和下一个元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538556/