从列表中排除包含另一个列表python中的一个或多个字符的单词



我有一个列表作为输入,其中包含单词,这些单词有时包含非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']

最新更新