繁体   English   中英

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

[英]How to use filter() on a string and get multiple word occurences?

我能够捕获第一个实例,但是试图在返回的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() 因此,对我来说,改进此代码比执行新代码更重要。

实际过滤器:

您正在搜索其他内容。 你应该做这个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)等于[ 如果function不为None则为 [item for item in iterable if item] 如果function为None则等于[ item for item in iterable if function(item)] [item for item in iterable if item]

理解lamba: lambda只是function另一个含义 。当您阅读以下内容时,请在您的脑海中用function替换lambda

>>> f = lambda x: x + 10
>>> f(3)
13

示例:2

f = lambda x, y : x * y

上面的功能等同于下面的功能。

def f(x, y):
    return x * y

lambda返回一个函数,该函数在:符号的左侧给出参数,将在其右侧返回表达式的值。 这篇文章中有关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']

过滤器非常直观:您为它提供了某种可迭代和约束(您的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))

我认为您想通过每个单词是否在word_list中来过滤由“”分隔的a_string列表。

我的答案:

sets = filter(lambda x:x in word_list, a_string.split())

要么:

sets = [x for x in a_string.split() if x in word_list]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM