【问题标题】:Python built in filtering of list not returning None itemPython内置过滤列表不返回无项目
【发布时间】:2019-11-14 18:17:57
【问题描述】:

当我尝试过滤一个列表时,我在输出中丢失了 None 类型的项目。我的代码如下:

def filter_compute(my_list):
    return list(filter(lambda x: x>5 if type(x)==int else x, map_compute(my_list)))

filter_compute(['cup', '321', 2, ['x'], 4])

map_compute 的输出应该如下:

map_compute(['cup', '321', 2, ['x'], 4])
output ['puc', '123', 4, None, 16]

所以从 map_compute 到 filter 函数的迭代应该是:['puc', '123', 4, None, 16]

我期望的输出是:['puc', '123', None, 16]

但我得到的输出是:['puc', '123', 16]

由于某种原因,None 项目没有被输出。

【问题讨论】:

  • 试试list(filter(lambda x: x>5 if isinstance(x, int) else True, map_compute(my_list)))
  • 如果您没有分享 map_compute 的代码,我们应该如何验证它产生了什么?

标签: python function filter


【解决方案1】:

filter 接受一个谓词,即一个返回布尔值和一个可迭代的函数。您的谓词 lambda x: x>5 if type(x)==int else x 如果元素是大于 5 的整数,则返回 True,如果是小于或等于 5 的整数,则返回 False,否则返回元素本身 .

当元素为None时,filter因此测试None的真实性,结果为False,因此被过滤掉。

如果你想只过滤掉

def filter_compute(my_list):
    return list(filter(lambda x: x>5 if isinstance(x, int) else True, map_compute(my_list)))

filter_compute(['cup', '321', 2, ['x'], 4])

一般来说,很多人觉得filter 有点混乱,更喜欢列表理解:

def filter_compute(my_list):
    return [x for x in my_list if not (isinstance(x, int) and x <= 5)]

【讨论】:

  • 已解决!非常感谢!您的解释也很容易理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2021-01-17
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多