我有一个单词列表和一个字母列表:
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)