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

why does filter + abs functions not give correct value

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

我哪里错了?

filter 方法借助一个函数来过滤给定的序列,该函数测试序列中的每个元素是否为真。
abs(x) returns 一个数的绝对值。

发生了什么事?

  • 数字列表中的每个值都传递给 abs 函数,只有当 abs 函数 returns 为真时,该函数才会添加到 newnum 列表。
  • 因为 abs returns 是一个正数,filter 将其视为 true 并将该数字添加到 newnum。
  • 除非该数字为 0。abs returns 0 为假,因此不会添加到 newnum 列表中。

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