如何在字符串上使用filter()并获得多个单词出现?

时间:2015-05-16 21:36:25

标签: python lambda

我能够捕获第一个实例,但尝试在返回的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();所以改进这段代码对我来说比一种新方法更重要。

3 个答案:

答案 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

中的lambda的更多信息
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]