我想在if
函数中声明lambda
语句:
假设:
cells = ['Cat', 'Dog', 'Snake', 'Lion', ...]
result = filter(lambda element: if 'Cat' in element, cells)
是否可以将'cat'过滤到result
?
答案 0 :(得分:12)
如果要过滤掉其中包含'cat'
的所有字符串,请使用
>>> cells = ['Cat', 'Dog', 'Snake', 'Lion']
>>> filter(lambda x: not 'cat' in x.lower(), cells)
['Dog', 'Snake', 'Lion']
如果您想保留'cat'
中的not
,请删除>>> filter(lambda x: 'cat' in x.lower(), cells)
['Cat']
。
>>> [elem for elem in cells if 'cat' in elem.lower()]
['Cat']
你也可以在这里使用列表理解。
{{1}}
答案 1 :(得分:2)
element
表示可迭代的元素。你只需要进行比较。
>>> cells = ['Cat', 'Dog', 'Snake', 'Lion']
>>> filter(lambda element: 'Cat' == element, cells)
['Cat']
>>>
或者,如果您想使用in
来测试元素是否包含某些内容,请不要使用if
。单个if
表达式是语法错误。
>>> filter(lambda element: 'Cat' in element, cells)
['Cat']
>>>
答案 2 :(得分:2)
此处您不需要if
。您的lambda
将返回一个布尔值,而filter()
只会返回lambda
返回True
的元素。
看起来你正试图这样做:
>>> filter(lambda cell: 'Cat' in cell , cells)
['Cat']
或者...
>>> filter(lambda cell: 'Cat' not in cell, cells)
['Dog', 'Snake', 'Lion', '...']
......我说不清楚。
请注意,filter(function, iterable)
相当于[item for item in iterable if function(item)]
,并且更常用(Pythonic)对此模式使用列表理解:
>>> [cell for cell in cells if 'Cat' in cell]
['Cat']
>>> [cell for cell in cells if 'Cat' not in cell]
['Dog', 'Snake', 'Lion', '...']
有关详细信息,请参阅List filtering: list comprehension vs. lambda + filter。