我有一个列表作为输入,其中包含单词,这些单词有时包含非ascii字母字符,如果它们包含不在ascii列表中的字母,我需要过滤掉整个单词。
因此,如果输入是:
words = ['Hello', 'my','dear', 'de7ar', 'Fri?ends', 'Friends']
我需要输出:
['Hello', 'my', 'dear', Friends']
words = ['Hello', 'my','dear', 'de7ar', 'Fri?ends', 'Friends']
al = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = [char for char in al]
filtered_words=[]
我试过这个:
for el in words:
try:
words in ascii_letters
except FALSE:
filtered_words.append(el)
和这个
filtered words = [ele for ele in words if all(ch not in ele for ch in ascii_letters)]
但它们都没有得到我需要的东西——我确实理解为什么,但由于我只学习python一周,我没能调整它们,让它们做我想让它们做的事情,也许有人知道如何处理这件事(不使用任何库(?感谢
您可以检查您的字母表是否是单词的超集:
>>> [*filter(set(al).issuperset, words)]
['Hello', 'my', 'dear', 'Friends']
顺便说一句,最好不要硬编码字母表(我见过很多人这样做,却忘记了字母(,而是导入它:
from string import ascii_letters as al
您需要遍历单词列表中的单词,以检查所有字母是否都是离子ASCII,或者您可以使用all()
函数:
words = ['Hello', 'my','dear', 'de7ar', 'Fri?ends', 'Friends']
al = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = [char for char in al]
out = []
for word in words:
not_in_ascii = False
for letter in word:
if letter not in ascii_letters:
not_in_ascii = True
if not_in_ascii:
continue
out.append(word)
列表理解和all()
也是可能的:
out = [word for word in words if all([letter in ascii_letters for letter in word])]
[i for i in words if i.isalpha()]
结果:
['Hello', 'my', 'dear', 'Friends']