You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中浮点数比较与列表分块问题求助

浮点数列表按区间分组问题

你需要将浮点数列表按10为跨度的区间分组(如70-80、80-90等),尝试排序后比较相邻元素但结果不符合预期,原代码及问题如下:

原尝试代码

mylist = [125.90720268, 122.08697428, 86.70855817, 82.68482956, 75.99304643, 71.92440719, 80.92440719] 

chunked_list = []

sort_list = sorted(mylist, key = lambda x:float(x))
curr = [sort_list[0]]
print("sort_list = ", sort_list)

for x in sort_list[1:]:
    if abs(x - curr[-1]) < 10:
        chunked_list.append(curr)
        curr = [x]
    else:
        curr.append(x)
chunked_list.append(curr) 

实际输出

[[71.92440719],
 [75.99304643],
 [80.92440719],
 [82.68482956],
 [86.70855817, 122.08697428],
 [125.90720268]]

期望输出

[[71.92440719, 75.99304643], [80.92440719, 82.68482956, 86.70855817], [122.08697428, 125.90720268]]

错误分析

  1. 条件判断逻辑完全颠倒:你原本想实现“差值小于10则归为一组”,但代码中写反了判断逻辑——当差值小于10时反而拆分分组,这直接导致了错误的分组结果。
  2. 需求逻辑的混淆:你的描述同时提到了“相邻差值≤10分组”和“按70-80、80-90区间分组”,但这两种逻辑并不等价。从你的期望结果来看,你真正需要的是按10跨度的区间分组,而非单纯的相邻差值判断。

解决方案

方案1:按10跨度区间分组(符合你的期望结果)

通过计算每个数所属的区间起始值(如x // 10 * 10)作为分组依据,将同一区间的数归为一组:

mylist = [125.90720268, 122.08697428, 86.70855817, 82.68482956, 75.99304643, 71.92440719, 80.92440719] 

sorted_list = sorted(mylist)
chunked_list = []

if not sorted_list:
    print(chunked_list)
else:
    current_group = [sorted_list[0]]
    # 计算当前元素所属的区间起始值
    current_interval = sorted_list[0] // 10 * 10
    
    for num in sorted_list[1:]:
        num_interval = num // 10 * 10
        if num_interval == current_interval:
            current_group.append(num)
        else:
            chunked_list.append(current_group)
            current_group = [num]
            current_interval = num_interval
    # 加入最后一组
    chunked_list.append(current_group)

print(chunked_list)

输出结果与你期望完全一致:

[[71.92440719, 75.99304643], [80.92440719, 82.68482956, 86.70855817], [122.08697428, 125.90720268]]

方案2:按相邻元素差值≤10分组(修正原代码逻辑)

如果你确实需要按相邻元素差值分组,只需修正原代码的判断逻辑即可:

mylist = [125.90720268, 122.08697428, 86.70855817, 82.68482956, 75.99304643, 71.92440719, 80.92440719] 

chunked_list = []
sort_list = sorted(mylist)

if not sort_list:
    print(chunked_list)
else:
    curr = [sort_list[0]]
    for x in sort_list[1:]:
        # 差值≥10时拆分分组,否则加入当前组
        if abs(x - curr[-1]) >= 10:
            chunked_list.append(curr)
            curr = [x]
        else:
            curr.append(x)
    chunked_list.append(curr)

print(chunked_list)

输出结果:

[[71.92440719, 75.99304643, 80.92440719, 82.68482956, 86.70855817], [122.08697428, 125.90720268]]

内容的提问来源于stack exchange,提问作者Masoumeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:06:51