Python Replace方法在应该接收字符串时是接收列表

Python Replace方法在应该接收字符串时是接收列表,python,Python,我现在有一个字符串列表,比如: strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.'] 我想替换这些字符串中的标点符号,并用它们的标记列表替换它们。我为此编写的代码是: # Original list: # strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.'] PUNC = ['.',

我现在有一个字符串列表,比如:

strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']
我想替换这些字符串中的标点符号,并用它们的标记列表替换它们。我为此编写的代码是:

# Original list:
# strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        if token in strings[i]:
            strings[i] = strings[i].replace(token, '').split()

# New desired list:
# strings = [['Hello', 'my', 'name', 'is', John'],
#            ['What', 'is', 'your', 'name'],
#            ['My', 'name', 'is', Peter']]
当我在单个字符串元素上运行代码时,它工作正常,但当我运行上面编写的代码时,它会给我以下警告:

AttributeError: 'list' object has no attribute 'replace'
我已经使用Python调试器设置了断点,并尝试遍历代码,我注意到在运行上述代码之前,数据是正常的,但在运行之后,只有前两个元素被转换为标记化版本,代码随后抛出错误。由于原始列表仅包含字符串元素,因此不应该发生此错误


有人知道为什么会这样吗?谢谢。

您应该删除
.split()
。它将字符串转换为一个列表:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        if token in strings[i]:
            strings[i] = strings[i].replace(token, '')
您也不需要
if
语句:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        strings[i] = strings[i].replace(token, '')
如果要拆分所有字符串,请在末尾执行此操作:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        strings[i] = strings[i].replace(token, '')
    strings[i] = strings[i].split()

您应该删除
.split()
。它将字符串转换为一个列表:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        if token in strings[i]:
            strings[i] = strings[i].replace(token, '')
您也不需要
if
语句:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        strings[i] = strings[i].replace(token, '')
如果要拆分所有字符串,请在末尾执行此操作:

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i in range(len(strings)):
    for token in PUNC:
        strings[i] = strings[i].replace(token, '')
    strings[i] = strings[i].split()

问题是在每次
replace
之后调用
split
,将
strings[i]
变成一个列表。只需更换一次即可

此外,您不需要检查字符串中是否有字符来替换它。此外,使用允许您避免一直使用索引

以下是代码的改进版本:

strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']

# Original list:
# strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i, s in enumerate(strings):
    for token in PUNC:
        s = s.replace(token, '')
    strings[i] = s.split()

print(strings)
# [['Hello', 'my', 'name', 'is', 'John'], ['What', 'is', 'your', 'name'], ['My', 'name', 'is', 'Peter']]

问题是在每次
replace
之后调用
split
,将
strings[i]
变成一个列表。只需更换一次即可

此外,您不需要检查字符串中是否有字符来替换它。此外,使用允许您避免一直使用索引

以下是代码的改进版本:

strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']

# Original list:
# strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']

PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']

for i, s in enumerate(strings):
    for token in PUNC:
        s = s.replace(token, '')
    strings[i] = s.split()

print(strings)
# [['Hello', 'my', 'name', 'is', 'John'], ['What', 'is', 'your', 'name'], ['My', 'name', 'is', 'Peter']]

我可以通过以下代码获得您想要的列表:

strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']
PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']
new_list =[]
for i in range(len(strings)):
    for token in PUNC:
        if token in strings[i]:
            strings[i] = strings[i].replace(token, '').split()
    new_list.append(strings[i])
print(new_list)

我可以通过以下代码获得您想要的列表:

strings = ['Hello my name is John.', 'What is your name?', 'My name is Peter.']
PUNC = ['.', ',', '?', '!', ':', ';', '(', ')']
new_list =[]
for i in range(len(strings)):
    for token in PUNC:
        if token in strings[i]:
            strings[i] = strings[i].replace(token, '').split()
    new_list.append(strings[i])
print(new_list)

您显示的代码没有演示问题,您需要一个包含多种标点符号的字符串您显示的代码没有演示问题,您需要一个包含多种标点符号的字符串