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)
您显示的代码没有演示问题,您需要一个包含多种标点符号的字符串您显示的代码没有演示问题,您需要一个包含多种标点符号的字符串