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

如何拆分嵌套列表中含空格与引号的字符串生成目标嵌套列表?

问题描述

我们有一个嵌套列表df1,每个子列表仅包含一个带双引号的长字符串,需要将其转换为不含双引号的标准嵌套列表df2。

原始数据

df1 = [
    ['1 "P040" 68.13 "P040_1" 2.55 8'],
    ['2 "P040" 46.82 "P040_2" 2.53 8'],
    ['3 "P040" 46.82 "P040_3" 2.51 8']
]

目标格式

df2 = [
    ['1', 'P040', '68.13', 'P040_1', '2.55', '8'],
    ['2', 'P040', '46.82', 'P040_2', '2.53', '8'],
    ['3', 'P040', '46.82', 'P040_3', '2.51', '8']
]

尝试的无效代码

用户尝试了以下代码,但未达到预期效果:

for row in df1:
    for elem in row:
        elem.strip().split('"')
        elem.strip().split('"')
解决方法

方法1:字符串替换+拆分

先移除所有双引号,再按空格拆分字符串,最后过滤拆分后可能出现的空元素:

df2 = []
for row in df1:
    # 取出子列表中的唯一字符串
    raw_str = row[0]
    # 移除双引号后按空格拆分,过滤空元素
    processed_items = [item for item in raw_str.replace('"', '').split() if item]
    df2.append(processed_items)

print(df2)

方法2:正则表达式提取元素

用正则匹配所有不含引号和空格的有效元素,直接提取目标内容:

import re

df2 = []
# 匹配所有非引号、非空格的连续字符
pattern = re.compile(r'[^"\s]+')
for row in df1:
    matched_items = pattern.findall(row[0])
    df2.append(matched_items)

print(df2)

方法3:利用CSV模块解析

这种带引号的格式符合CSV规则,用Python内置csv模块可以自动处理引号包裹的内容:

import csv
from io import StringIO

df2 = []
for row in df1:
    # 将字符串转为类文件对象
    fake_file = StringIO(row[0])
    # 指定空格为分隔符,csv读取器会自动去除引号
    reader = csv.reader(fake_file, delimiter=' ')
    # 取出解析后的行并过滤空元素
    processed_items = [item for item in next(reader) if item]
    df2.append(processed_items)

print(df2)

原代码无效原因

  1. 执行elem.strip().split('"')后没有将结果赋值给变量,操作结果未被保存;
  2. 直接按引号拆分后会得到包含空字符串的列表,还需二次处理;
  3. 字符串是不可变类型,所有修改操作不会改变原变量,必须将结果存入新变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:20:40