有没有办法根据小数位在python中对数组/列表的值进行动态分组?
Posted
技术标签:
【中文标题】有没有办法根据小数位在python中对数组/列表的值进行动态分组?【英文标题】:Is there a way to dynamically group values of a an array/list in python based on their decimal places? 【发布时间】:2021-10-25 08:07:53 【问题描述】:我有以下一维数组:
B = [8.55905955, 8.63646974, 21.7694643, 21,87843119, 21.92463355]
基于这个数组,我想要一个只包含相似值的平均值的新数组。对于上面显示的数组,它应该导致一个新的数组,如:
B_new = [8.598, 21.858]
应该考虑什么:
B 中的值的总数是可变的。应该分组的值的数量是可变的(可以是 2、3、4、5,甚至只有一个)。一组中考虑的值的阈值应基于连续值之间的距离,例如,[8.5, 8.7, 8.8] 应为一组,[8.5, 8.7, 9.9, 10.2] 应导致两组,因为差异8.7 和 9.9 之间大于 1。
任何帮助将不胜感激。
谢谢
【问题讨论】:
idownvotedbecau.se/noattempt 【参考方案1】:简单的分步生成器函数:
def chunk_avg(array, min_gap=1):
chunk = []
for n in array:
if chunk and chunk[-1] + min_gap < n:
yield sum(chunk) / len(chunk)
chunk.clear()
chunk.append(n)
if chunk:
yield sum(chunk) / len(chunk)
list(chunk_avg([8.55905955, 8.63646974, 21.7694643, 21.87843119, 21.92463355]))
# [8.597764645000002, 21.857509679999996]
list(chunk_avg([8.5, 8.7, 9.9, 10.2]))
# [8.6, 10.05]
【讨论】:
【参考方案2】:from more_itertools import split_when
from statistics import mean
B = [8.55905955, 8.63646974, 21.7694643, 21.87843119, 21.92463355]
B_new = [*map(mean, split_when(B, lambda x, y: y - x > 1))]
【讨论】:
可能想提一下,这需要安装一个额外的包。以上是关于有没有办法根据小数位在python中对数组/列表的值进行动态分组?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法读取除python apache beam中定义的文件列表之外的所有文件?
有没有办法将图像文件夹(png、gif)转换为 Python 中的数组列表?
Python Pandas:有没有办法根据列表中的字符串获取子集数据帧