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

如何筛选右侧值为1.0的文本数据并生成整洁列表?

搞定文本数据筛选与格式整洁化问题

嘿,我来帮你解决这个数据筛选和格式整理的小问题!先聊聊你之前代码踩的几个坑,再给你一个靠谱的解决方案。

问题分析

你之前的代码出现混乱结果,主要是这几个原因:

  • 逻辑判断错误:第一个代码用了or,这等于说"只要值不是-0.0 或者 不是0.0就保留"——但任何值都满足这个条件,所以所有内容都被加进去了;
  • 没过滤注释行:像y: 3 dimensions, 657 entries:这种非数据行被误判为有效数据;
  • 拆分方式不对:原始数据一行包含多个[xxx] = 值的键值对,直接按空格拆分把每个键值对拆成了零散的单词,导致结构混乱;
  • 忽略浮点精度:比如0.9999999999999876其实是1.0的浮点近似值,应该被保留,而-1.2545520178264269e-14是近似0的数值,应该被排除。

修正后的代码

这里用正则表达式精准匹配键值对,同时处理浮点精度和注释行问题,代码如下:

import re

# 正则匹配格式:[xxx] = 数值(支持科学计数法)
kv_pattern = re.compile(r'(\[.*?\]) = ([\-+]?\d+\.?\d*(?:e[\-+]?\d+)?)')

cleaned_results = []

with open("t.txt", "r") as file:
    for line in file:
        line = line.strip()
        # 跳过注释行(包含dimensions/entries的行)
        if "dimensions" in line or "entries:" in line:
            continue
        # 提取当前行所有的键值对
        all_pairs = kv_pattern.findall(line)
        for key, value_str in all_pairs:
            try:
                value = float(value_str)
                # 允许微小浮点误差(1e-10以内视为等于1.0)
                if abs(value - 1.0) < 1e-10:
                    # 整理成整洁的格式,可选存字符串或元组
                    cleaned_results.append(f"{key.strip()} = 1.0")
                    # 如果需要结构化列表,用下面这行:
                    # cleaned_results.append( (key.strip(), 1.0) )
            except ValueError:
                # 跳过无法转换为数值的异常情况
                continue

# 打印整洁输出
print("筛选后的结果:")
for item in cleaned_results:
    print(item)

预期输出示例

运行后你会得到整洁的、仅包含值为1.0(或近似1.0)的条目:

[1, 5, 7] = 1.0
[2,11] = 1.0
[3, 2] = 1.0
[3, 6, 2] = 1.0
[7, 4, 3] = 1.0
[1, 8] = 1.0
[7, 3] = 1.0
[8,10] = 1.0
[10, 7] = 1.0

代码要点说明

  • 用正则表达式精准捕获每个键值对,避免拆分混乱;
  • 过滤掉无关的注释行,只处理有效数据;
  • 用浮点误差范围判断,解决浮点精度导致的近似值问题;
  • 输出格式可自定义,既可以是整洁的字符串,也可以是结构化的元组列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:38