为啥 filter + abs 函数没有给出正确的值

Posted

技术标签:

【中文标题】为啥 filter + abs 函数没有给出正确的值【英文标题】:why does filter + abs functions not give correct value为什么 filter + abs 函数没有给出正确的值 【发布时间】:2020-06-13 18:08:14 【问题描述】:
numbers = list(range(-10,10))
print(numbers)
newnum = filter(abs,numbers)
print(list(newnum))
print(abs(-10))

输出如下

[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10

我认为它应该如下所示

[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10

我哪里错了?

【问题讨论】:

【参考方案1】:

filter 方法在一个函数的帮助下过滤给定的序列,该函数测试序列中的每个元素是否为真。 abs(x) 返回数字的绝对值。发生了什么?

numbers 列表中的每个值都传递给 abs 函数,该函数仅在 abs 函数返回 true 时才添加到 newnum 列表中。 由于 abs 返回一个正数,filter 将其视为 true 并将该数字添加到 newnum。 除非该数字为 0。abs 返回 0,这是 false,因此不会添加到 newnum 列表中。

过滤器返回数字列表中的元素,当传递给abs函数时结果为true,而不是abs函数的返回值。

【讨论】:

以上是关于为啥 filter + abs 函数没有给出正确的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Django ORM explain() 函数没有给出预期的输出?

为啥内联函数的效率低于内置函数?

为啥我的合并函数给出奇怪的答案?

为啥使用堆栈的dfs没有给出正确的结果

为啥 QDatastream 没有给出正确的输出

为啥使用 filter() 给出了我想要的,但使用 get() 会引发错误