簡體   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