如何使用isalpha函数删除特殊字符

时间:2018-10-17 21:37:59

标签: python string python-3.x

我正在尝试从字符串中的每个元素中删除特殊字符。下面的代码确实计算了元素,但是我无法获取.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

3 个答案:

答案 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 方案考虑使用特殊字符。