从列表中筛选包含某些字符的单词



我有一个单词列表和一个字母列表:

list = ["clyde","tool","ball","window"]
letters = ["c","t"]

如果第二个列表中有任何字母,我想通过删除单词来过滤第一个列表。

list = ["ball","window"]

您可以使用filter()all()来只保留在letters中没有任何字母的单词(顺便说一句,您不应该使用list作为变量名,因为它隐藏了list内置(:

data = ["clyde","tool","ball","window"]
letters = ["c","t"]
result = list(filter(lambda x: all(c not in x for c in letters), data))
# Prints ['ball', 'window']
print(result)

使用set对象可以非常直接地实现这一点(也是迄今为止唯一不需要使用Python迭代每个单词的字母的解决方案——set.intersection()遵循底层C代码来迭代每个字母(:

words = ["clyde", "tool", "ball", "window"]
letters = {"c", "t"}  # a set object
filtered_words = [word for word in words if not letters.intersection(word)]

这个问题可以使用列表理解来解决,如下所示:

lst = ["clyde","tool","ball","window"]
letters = ["c","t"]
res = [data for data in lst if all(item not in data for item in letters)]
print(res)

请注意,python中最好不要有与关键字同名的变量,所以我将列表更改为lst-

易于理解的代码示例

words_list = ["clyde","tool","ball","actor","window"]
letters = ["c","t"]
final_list=[]
# loop for each word in main list
for word in words_list:
#check for each letter if present in restricted letters
for letter in word:
if letter in letters:
break
else:
final_list.append(word)
print(final_list)

最新更新