我正在尝试计算长字符串中的单词频率。我已经使用string.split()方法将字符串拆分为单词列表,并在拆分长字符串之前通过应用string.lower()删除了区分大小写的字符。我想删除一些特殊字符,例如“!”,“:”,“。”。因为这些字符会弄乱字数。下面是我编写的函数,但似乎无法正常工作
def clean_word(word):
replace_list = [':','.',',','!','?']
s = list(word)
for i in s:
for j in replace_list:
if i == j:
i=""
print(s) # to see s before it being joined
word =''.join(s)
return word
print(clean_word('Hello!'))
结果是:
['H','e','l','l','o','!']
你好!
我想知道为什么“!”还没有被替换为“”?我确实在代码行中放了一个测试代码,它显示了比较效果。
if i == j:
print('Checked')
答案 0 :(得分:3)
使用enumerate
:
def clean_word(word):
replace_list = [':','.',',','!','?']
s = list(word)
for i, x in enumerate(s):
if x in replace_list:
s[i] = ""
word = ''.join(s)
return word
print(clean_word('Hello!'))
# Hello
如果您对列表理解感兴趣:
word = 'Hello!'
replace_list = [':','.',',','!','?']
print(''.join([x for x in word if x not in replace_list]))
# Hello
答案 1 :(得分:0)
可以更轻松地解决它:
def clean_word(word):
replace_list = [':','.',',','!','?']
for i in replace_list:
word = word.replace(i,"")
return word
print(clean_word('Hello!'))
代码错误:在您的代码中,您正在编写i=""
,它将更改变量i
的值,而不是原始字符串。
答案 2 :(得分:0)
def clean_word(word):
replace_list = [':','.',',','!','?']
new_word = ''
for x in word:
if x not in replace_list:
new_word += x
return new_word
print(clean_word('Hello!'))
输出
Hello
答案 3 :(得分:0)
您应该使用列表理解功能,更快,更干净:
replace_list = [':','.',',','!','?']
word = "H:e.l,l!o?"
print ''.join([c for c in word if c not in replace_list]) #OUTPUTS: Hello