返回列表的Python连接方法?

时间:2017-02-07 17:04:49

标签: python string list

我有一个元素列表(“标记”),我假设它们像字符串一样。我想在其中找到带下划线的单词,并用空格替换下划线。我有以下代码:

for e in tokens:
      if '_' in e:
            cmpd = list(e)
            cmpd[e.find('_')] = ' '
            ''.join(cmpd)
            new_tokens[index] = cmpd

它基本上与这里的相同: Change one character in a string in Python?

后来我试图连接句子中的所有列表元素,每个元素用空格分隔,但是我得到以下错误:

  

TypeError:只能将列表(不是“str”)连接到列表

如果我打印出ecmpd,我会得到此输出:

e: my_string

cmpd: ['m', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g']

为什么cmpd是一个列表而不是一个字符串?

5 个答案:

答案 0 :(得分:3)

您需要使用''.join(cmpd)cmpd分配给=。:

cmpd=''.join(cmpd)

答案 1 :(得分:2)

''.join(cmpd)

此行将cmpd转换为字符串,然后将该字符串抛出。你应该保留字符串:

cmpd = ''.join(cmpd)

答案 2 :(得分:2)

这里有很多问题:

  • 您使用未定义的index
  • .join 在原地工作;
  • 如果令牌包含多个下划线,则只会替换一个;
  • 如果令牌不包含下划线,则不添加;和
  • ...

怎么样:

new_tokens = [token.replace('_',' ') for token in tokens]

这将取代整个循环,并清楚地表明您正在用空格替换下划线。

答案 3 :(得分:1)

no_underscores = [x.replace('_', ' ') for x in tokens]
print(' '.join(no_underscores))

所以会发生的是您创建一个新列表(您也可以覆盖前一个列表),其中包含旧列表的元素但没有下划线(.replace即使您要查找的字符串是不在那里)。在第二行,新列表的所有元素都是join,并且它们之间有空格。

如果您对上述内容感到满意,您甚至可以将它们组合起来:

print(' '.join(x.replace('_', ' ') for x in tokens))

的优点是不会创建任何额外的列表。

答案 4 :(得分:0)

当您到达此行时cmpd = list(e) e是一个字符串,您将其转换为列表,这将使每个字符成为列表中的项目