使用filter()过滤“无”输出Python

时间:2018-11-29 04:58:41

标签: python python-3.x python-2.7

在尝试过滤“无”输出时出现错误,在Python中使用过滤器功能时,这是我的代码:

def my_function(x):
if (x % 2 == 0):
    x=filter(None, x)
    return(x)

for x in range(1, 10):
    sum=sum+(my_function(x))
    print(sum)

Python无法进行总和,因为无法删除None输出,因为它是“添加”此

None
2
None
4
None
6
None
8
None

不是这个

2
4
6
8

2 个答案:

答案 0 :(得分:3)

这里有几个错误。首先,不要使用sum,因为它是内置的python函数名称。 filter期望使用可迭代的对象和一个函数。 None不是一个函数,它将使用identity函数(返回的值相同)(@ bro-grammer提示)。由于x不可迭代,因此无法对其使用过滤器。

您要检查x是否偶数:

def my_function(x):
    if (x % 2 == 0):
        return True
    return False

sumation = 0
for x in range(1, 10):
    if my_function(x):
        sumation += x
print(sumation)

使用实际的filtersum的另一个选项是:

>>> def my_function(x):
...     if (x % 2 == 0):
...         return True
...     return False
... 
>>> sumation = sum(filter(my_function, range(1, 10)))
>>> sumation
20

pythonic 的实现方式是使用生成器和sum

>>> sum(x for x in range(1, 10) if x % 2 == 0 )
20

答案 1 :(得分:1)

我猜您正在尝试以错误的方式使用过滤器功能。您可以将以下代码用作示例:

def my_function(x):
    if (x % 2 == 0):
        return True
    else:
        return False

alist = filter(my_function,list(range(1,10)))
print(sum(alist))

希望有帮助