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

如何修复含单双空格分隔的数值输入数据的分割代码?

问题修复:处理带不同空格数量的数值分割

我来帮你搞定这个分割问题!核心原因是你用split(" ")按单个空格分割时,会把连续的空格(比如正数前的两个空格)拆分成空字符串,而且每行开头的空格也会导致列表里出现空元素,这就干扰了后续的数据处理。

修复方案1:使用默认的split()方法

Python的字符串split()方法如果不带任何参数,会自动分割任意数量的空白字符(包括单个空格、多个连续空格、制表符等),同时还会忽略字符串开头和结尾的空白,完美适配你这种正数前多空格、负数前单空格的情况。

修改后的代码如下:

def switch(letter):
    switcher = {
        "[": "",
        "]": "",
        "\n": "@",
    }
    return switcher.get(letter, letter)

converted_data = ''
with open("/Users/naghmeh/Documents/python/core1", "r") as file:
    data = file.read()
    for letter in data:
        letter = switch(letter)
        converted_data += letter

# 按@分割成每行数据
converted_data = converted_data.split('@')
split_converted_data = []

for line in converted_data:
    # 用不带参数的split()处理空白分割
    parts = line.split()
    # 过滤掉可能的空行(如果文件末尾有换行的话)
    if parts:
        # 把字符串转成整数(可选,根据你的需求)
        num_list = [int(num) for num in parts]
        split_converted_data.append(num_list)

修复方案2:使用正则表达式分割

如果你需要更灵活的分隔符控制,可以用re.split()来匹配一个或多个空格:

import re

# ...前面的代码和方案1一样...

for line in converted_data:
    parts = re.split(r'\s+', line.strip())
    if parts:
        num_list = [int(num) for num in parts]
        split_converted_data.append(num_list)

这里r'\s+'表示匹配一个或多个空白字符,line.strip()先去掉每行开头结尾的空白,确保不会出现空元素。

额外优化建议

你的switch函数可以用更高效的str.translate()方法替代,避免循环每个字符:

# 创建转换表:把[、]替换成空,换行替换成@
trans_table = str.maketrans({'[': '', ']': '', '\n': '@'})
with open("/Users/naghmeh/Documents/python/core1", "r") as file:
    data = file.read()
    converted_data = data.translate(trans_table)

这段代码和你原来的循环处理效果完全一致,但运行效率更高哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:52:48