我能够捕获第一个实例,但尝试在返回的sets
例如,这是我的代码简化,
word_list = ['Geico','Mike']
a_string = "what day is it, Mike Mike Mike"
sets = filter(lambda x:x in a_string,word_list)
...我得['Mike']
但想得到['Mike','Mike','Mike']
;只是一些方法可以更好地了解如何在可能的情况下迭代过滤器。我可能不需要每个“Mike”用于我的项目,但理解这个将帮助我解决使用带有lambda的filter();所以改进这段代码对我来说比一种新方法更重要。
答案 0 :(得分:2)
低估过滤器
你正在寻找其他地方。
你应该这样做filter(needle,haystack)
但你正在做filter(haystack,needle)
实施例
>>> names = ['Anna', 'Grant', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach']
>>> b_names = filter(lambda s: s.startswith('B'), names)
>>> print b_names
#Output
['Bob', 'Barbara']
filter(function, iterable)
相当于[item for item in iterable if function(item)]
,如果函数不是无,[item for item in iterable if item]
,如果函数为无。
了解lamba:
lambda
只是function
的另一个词当您阅读以下内容时,请在您的脑海中将lambda
替换为function
:
>>> f = lambda x: x + 10
>>> f(3)
13
实施例:2
f = lambda x, y : x * y
以上功能相当于下面的功能。
def f(x, y):
return x * y
lambda
返回一个函数,该函数给出:
符号左侧的参数将返回右侧表达式的值。
有关此post
from collections import Counter
word_list = ['Geico','Mike']
a_string = "what day is it, Mike Mike Mike"
li=a_string.split()
print Counter(li)
print [i for i in li if i in word_list]
Output:
Counter({'Mike': 3, 'what': 1, 'it,': 1, 'day': 1, 'is': 1})
['Mike', 'Mike', 'Mike']
答案 1 :(得分:1)
过滤非常直观: 你给它一些迭代和约束(你的lambda函数)。然后,如果它满足约束条件,它将遍历每个项目并仅保留它。
因此,在您的情况下,您希望迭代句子的单词(因此首先将其拆分)并且只保留它们,如果它们在您的单词列表中:
word_list = ['Geico','Mike']
a_string = "what day is it, Mike Mike Mike"
sets = filter(lambda x: x in word_list, a_string.split())
print(list(sets))
答案 2 :(得分:0)
我想你想要过滤a_string分割的列表" " 是否每个单词都在word_list中。
我的回答:
sets = filter(lambda x:x in word_list, a_string.split())
或:
sets = [x for x in a_string.split() if x in word_list]