Python 将列表中的元素与上一个和下一个元素进行比较

标签 python

在列表中,我想删除与上一个和下一个不同的元素(例如:差异大于 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

如果 yNone,表达式为 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/

相关文章:

python - 我在哪里可以找到 GladeGen?

python - 如何正确地将 numpy 数组传递给 Cython 函数?

python - 解析 HTML 页面以获取 <p> 和 <b> 标签的内容

python - 如何使用 models.py 、 serializers.py 和 views.py 将解析的 json 数组值保存到 django python Rest api 中的数据库

python - Ubuntu : error using cv2. imshow() 与 pyplot.plot()

python - 与空间建立适当的联系

python - 在 X 中获取事件窗口标题

python - 根据具有连续数据的列值将 DataFrame 切片为其他 DataFrame

python - 我如何编写一个宏来为我在网页游戏中进行点击?

python - Pandas 检查列中 x 的子字符串,如果找到将字符串添加到 x