如果在lambdas Python中声明

时间:2013-07-26 01:49:12

标签: python

我想在if函数中声明lambda语句:

假设:

cells = ['Cat', 'Dog', 'Snake', 'Lion', ...]
result = filter(lambda element: if 'Cat' in element, cells)

是否可以将'cat'过滤到result

3 个答案:

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