【问题标题】:Print list elements with difference more than a value打印差异大于一个值的列表元素
【发布时间】:2018-11-05 02:27:10
【问题描述】:

我有一个 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)

我试过这个。但我没有得到正确的输出。

【问题讨论】:

  • 你可以试试[k for k,v in zip(x, x[1:]) if v-k > 10]
  • 你能把你的输出粘贴到这里吗?
  • 输出 [0, 235, 300, 480]
  • 这个问题有点不清楚。如果您有一个列表,您希望输出是什么: [1, 2, 3, 4, 5, 15] (假设您有 10 的差异)?您希望输出为 [1, 15] 还是 [1, 3, 5, 15]?
  • 没有。只有当它们的差异超过 10 时,我才需要元素。在您给定的示例中,我需要 [1, 15] 作为输出。

标签: python arrays python-3.x list


【解决方案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]

【讨论】:

  • 谢谢。这工作正常。但是有没有更 Pythonic 的方式来做到这一点?
  • 我不能告诉你,因为我只是一个初学者,15 天前才开始学习 python。
【解决方案2】:

使用numpy

import numpy as np
xarr = np.array(x)
result = xarr[np.where(np.diff(xarr) > 10)[0]+1]

生产:

array([300, 480, 506])

我相信这可能就是您要找的东西?

【讨论】:

  • 230 不在结果数组中。我需要 [230, 300, 480, 506] 作为输出
【解决方案3】:

试试这个:

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]))

努力获得所需的输出,它现在是你的朋友了。

【讨论】:

  • 代码的输出给出 [235, 300, 480]。它不打印 506
  • @MoidShaikh Now?,我编辑了我的,希望它能正常工作。
【解决方案4】:

使用迭代器:

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)

【讨论】:

  • 最后一个元素没有添加到结果中
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多