Skip to main content
 首页 » 编程设计

python之对数组中小于某个值的值求和

2025年05月04日16lhb25

我有一个包含数字和零的 3x3 数组。我需要计算下一个点 ls[i+1] 和它之前的点 ls[i] 之间的绝对差值。这是我的列表的示例:

ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)] 

零是错误数据。我需要一个循环:

  1. 取每一行中 future 数字和当前数字的绝对差值,
  2. 使大于最大差值的差值为零 (max diff=1.9 在这种情况下,假设零是错误数据),
  3. 将每一行的差异加在一起,这样我就得到了一个总和列表。

就目前而言,最终结果将是:

result=[(0.4,99),(0.2,1.3),(97.6,98.3)] 

鉴于零不是好的数据,大于 1.9 的差异不是准确的结果。

请您参考如下方法:

如果您愿意将给定最大差异值的差异设置为 0,或许可以在第二步中实现该逻辑:

ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)] 
 
unfiltered = [tuple(abs(x1 - x2) for x1, x2 in zip(tup, tup[1:])) 
                for tup in ls] 
max_diff = 1.9 
results = [tuple((x if x < max_diff else 0) for x in tup) 
                for tup in unfiltered] 

如果您的对象不是 native python 列表/元组但支持索引,最好这样做:

ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)] 
 
unfiltered = [tuple(abs(item[i] - item[i+1]) for i in range(len(item)-1)) 
                for item in ls] 
max_diff = 1.9 
results = [tuple((x if x < max_diff else 0) for x in tup) 
                for tup in unfiltered]