python - 按阈值将python列表分成多个列表?
问题描述
假设我有一个值列表,其中的值组合在一起。
例如,
lst = [5.0, 5.2, 4.0, 4.1, 4.05, 5.1]
我怎么能把它分成两组,这样输出是[5.0, 5.2, 5.1], [4.0, 4.05, 4.1]
?我确信每组中的每个值都在其合作伙伴的 0.2 以内。为这种分离分配阈值的最佳方法是什么?
这是我到目前为止所尝试的。
unique_values = []
for x in range(len(lst)):
isInList=False
for y in range(len(unique_values)):
if compare_threshold(lst[x], unique_values[y]): #returns true if the two values are within the threshold
isInList=True
if isInList == False:
unique_values.append(lst[x])
print(unique_values)
这给了我列表中单个唯一点的列表。
[55.02123905, 55.02167612, ... 137.0536191, 137.0536604] (118 values)
输出:
[55.02123905, 57.03325912, 67.0292289, 69.0339192, 71.01344708, 92.02611874, 94.04178177, 109.054014, 112.0537901, 119.0396714, 120.0424827, 136.0683814, 137.0527245]
解决方案
组的最大大小为 0.2。需要 _entier 来解决浮点精度问题。
In [183]: def grouper(x, delta=0.2, _entier=1e-6):
...: out, part = [], []
...: for item in sorted(x):
...: if not part:
...: part = [item]
...: elif item - part[0] <= delta + _entier:
...: part.append(item)
...: else:
...: out.append(part)
...: part = [item]
...: if part:
...: out.append(part)
...: return out
In [184]: grouper(lst)
Out[184]: [[4.0, 4.05, 4.1], [5.0, 5.1, 5.2]]
推荐阅读
- php - 使用 PHP 从 MySql 表创建子菜单
- kubernetes - 将 Google Cloud SQL 凭据连接到 Kubernetes Secret
- python - 从 0.5.1 升级到 0.8.2 后 graph_from_polygon 中的 osmnx TypeError
- arrays - 字符串的动态数组跳过第一个索引
- typescript - 返回扩展匿名类的函数的类型定义
- r - R:无法将绘图从循环输出到文件
- javascript - x 不是一个文件中的函数,但它可以在另一个文件中使用?
- c# - 如何在画布事件处理程序中设置子属性?
- python - 计算程序最小处理能力
- c - 在C中逐行读取文件(不使用fgets)