【问题标题】:Tracking how many times value went below or above threshold based on list根据列表跟踪值低于或高于阈值的次数
【发布时间】:2017-11-19 23:32:50
【问题描述】:

我有一个值列表,我正在寻找方法来跟踪这些值是否低于某个值,然后它们是否回到它之上(可能是多次)

假设我的 lisy 看起来像:

list1 = [20, 18, 16, 15, 13, 12, 16, 17, 14, 11, 16]

而且我需要一些东西来告诉我,在最初低于 15 之后,这些值又回到了 15 以上两次或 x 次。 有谁知道如何解决这个问题?

【问题讨论】:

  • 所以在这个列表中,它低于两次 (13,12),然后上升到 16。所以 2?
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 在它低于一次(13 次或更远)后,它又回到了两次以上:(16, 17) 和 (16) - 列表中的最后一个
  • @RoryDaulton 好的......但我真的不知道如何开始解决这个问题,任何代码都只是无用的胡言乱语。我可以发布我正在处理的脚本,但在它的其他部分没有任何帮助。很抱歉,有人可能有同样的问题并且可以告诉我:“使用模块 x 中的那个函数”。我在谷歌中尝试的任何描述都将我指向完全不同的方向(例如 CV2 和图像处理)。

标签: python python-3.6


【解决方案1】:
pos_count = 0
neg_count = 0 

for x in range(len(list1)-1):
    if list1[x] <= 15 and list1[x + 1] > 15:
        neg_count += 1
    elif list1[x] >= 15 and list1[x + 1] < 15:
        pos_count += 1

print(pos_count)
print(neg_count)

【讨论】:

  • 我不确定在 python 中if x &lt;= 15 and list1[num + 1] &gt; 15: 是否会抛出列表中最后一个索引的索引超出范围异常
  • 可以了,运行这段代码没有异常,非常感谢。
【解决方案2】:

您可以简单地检查与 15 的负/正差。 像这样的:

l = [20, 18, 16, 15, 13, 12, 16, 17, 14, 11, 16] #Your list

import numpy as np
arr = np.asarray(l) #Convert to numpy-array

#Now apply the function to check the difference from 15
result = np.apply_along_axis(lambda x: x - 15, axis=0, arr=arr)

这会导致: 数组([ 5, 3, 1, 0, -2, -3, 1, 2, -1, -4, 1])

如果你想检查所有的正值,你可以这样做:

pos = result[result >= 0] #All positive values
neg = result[result <  0] #All negative values

如果你想计算这种情况发生的频率,你可以计算长度:

len(pos) #Number of positives
len(neg) #Number of negatives

【讨论】:

  • 感谢回答,尽管其他答案为我提供了更好的结果。但它可能在以后仍然有用。再次感谢
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多