【问题标题】:Python for a list of strings, if a string contains a character, concatenate it with the next list elementPython 用于字符串列表,如果字符串包含字符,则将其与下一个列表元素连接
【发布时间】:2019-09-12 15:35:26
【问题描述】:

我有一个这样的字符串列表:

ls = ['3395', 'test', '"city ', 'state"']

我需要搜索它以找到带有引号的字段,以便我可以将这些字段合并在一起。基本上,我想要的列表是:

ls_i_want = ['3395', 'test', '"city, state"']

我有以下代码基本上可以实现这一点:

ls[2:4] = [''.join(ls[2:4])]

并返回列表:

['3395', 'test', '"city state"']

这个输出实际上很好,但我苦苦挣扎的是引号的位置是可变的;它并不总是在索引 2 处,但结束引号将始终为 +2。我正在尝试沿着这段代码的路径工作:

for i, j in enumerate(ls):
    if '"' in j:
        ls[i:i+2] = ''.join(ls[i:i+2])

但返回列表:

['3395', 'test', '"', 'c', 'i', 't', 'y',' ', 's', 't', 'a', 't', 'e', '"']

我哪里错了?我不应该使用枚举吗?

【问题讨论】:

  • 您是否在尝试解析csv 文件?
  • 您忘记在第二个 sn-p 中在 ''.join(...) 周围添加方括号。
  • 我宁愿不要。就我而言,这只是一个错字。
  • 我认为您还必须遍历列表的副本,因为在合并 2 个元素后,您的索引将减少 1。
  • 看起来您已经拆分了csv 文件的内容。您可以使用csv 模块,它会自动处理包含逗号的引号字符串。

标签: python string list


【解决方案1】:

我在 GyuHyeon Choi 的回答中找到了更好的答案here。基本上我可以在拆分之前获取字符串并将其输入 csv.reader 并像这样格式化:

cStr = '3395,test,"city,state"'
newStr = [ '"{}"'.format(x) for x in list(csv.reader([cStr], delimiter=',', quotechar='"'))[0] ]

为了得到我想要的输出,它是可变的,所以如果一个字段中有超过 1 个逗号,它会说明它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    相关资源
    最近更新 更多