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]]
错误分析
- 条件判断逻辑完全颠倒:你原本想实现“差值小于10则归为一组”,但代码中写反了判断逻辑——当差值小于10时反而拆分分组,这直接导致了错误的分组结果。
- 需求逻辑的混淆:你的描述同时提到了“相邻差值≤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
相关产品推荐
相关产品推荐

