我正在尝试从字符串中的每个元素中删除特殊字符。下面的代码确实计算了元素,但是我无法获取.isalpha来删除非字母元素。有人可以协助吗?先感谢您。
input = 'Hello, Goodbye hello hello! bye byebye hello?'
word_list = input.split()
for word in word_list:
if word.isalpha()==False:
word[:-1]
di = dict()
for word in word_list:
di[word] = di.get(word,0)+1
di
答案 0 :(得分:1)
您似乎希望word[:-1]
删除单词的最后一个字符,并将更改反映在列表word_list
中。但是,您已将word_list
中的字符串分配给一个名为word的新变量,因此更改不会反映在列表本身中。
一个简单的解决方法是创建一个新列表并将值附加到该列表中。请注意,您的原始字符串称为input
,它遮盖了内置input()
函数,但这不是一个好主意:
input_string = 'Hello, Goodbye hello hello! bye byebye hello?'
word_list = input_string.split()
new = []
for word in word_list:
if word.isalpha() == False:
new.append(word[:-1])
else:
new.append(word)
di = dict()
for word in new:
di[word] = di.get(word,0)+1
print(di)
# {'byebye': 1, 'bye': 1, 'Hello': 1, 'Goodbye': 1, 'hello': 3}
您还可以删除第二个for循环并改为使用collections.Counter
:
from collections import Counter
print(Counter(new))
答案 1 :(得分:1)
使用re的一种解决方案:
In [1]: import re
In [2]: a = 'Hello, Goodbye hello hello! bye byebye hello?'
In [3]: ' '.join([i for i in re.split(r'[^A-Za-z]', a) if i])
Out[3]: 'Hello Goodbye hello hello bye byebye hello'
答案 2 :(得分:1)
您的for
循环就快到了。主要的绊脚石似乎是word[:-1]
本身什么都不做,您需要将这些数据存储。例如,通过附加到列表。
您还需要指定不需要修改的字符串所发生的情况。我也不确定字典的作用是什么。
因此,您的for
循环已被重写:
mystring = 'Hello, Goodbye hello hello! bye byebye hello?'
word_list = mystring.split()
res = []
for word in word_list:
if not word.isalpha():
res.append(word[:-1])
else:
res.append(word)
mystring_out = ' '.join(res) # 'Hello Goodbye hello hello bye byebye hello'
惯用的写法是通过向str.join
提供列表理解:
mystring_out = ' '.join([word[:-1] if not word.isalpha() else word \
for word in mystring.split()])
不用说,由于字符串末尾有不需要的字符,因此假设word.isalpha()
返回False
,这是您想要的 only 方案考虑使用特殊字符。