我有一个元素列表(“标记”),我假设它们像字符串一样。我想在其中找到带下划线的单词,并用空格替换下划线。我有以下代码:
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”)连接到列表
如果我打印出e
和cmpd
,我会得到此输出:
e: my_string
cmpd: ['m', 'y', ' ', 's', 't', 'r', 'i', 'n', 'g']
为什么cmpd是一个列表而不是一个字符串?
答案 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是一个字符串,您将其转换为列表,这将使每个字符成为列表中的项目