当前位置: 首页 > 知识库问答 >
问题:

Python:filter(无,[布尔列表])行为

单淳
2023-03-14

编辑:在阅读了建议的链接后,我不知道为什么这被标记为重复。告我。

有人能帮我理解为什么filter(无,[布尔列表])删除False值吗?

采取以下措施:

low = 25 
high = 35
to_match = [15, 30, 32, 99]
def check(low, high, to_match):
    return [low <= i <= high for i in to_match]

检查(低、高、匹配)返回[假、真、真、假]

过滤器(无,检查(低,高,to_match))返回[True, True]

所以我想,Python一定认为False!但令我惊讶的是,False is No返回False

A) 我错过了什么?

B) 如何仅从[True,None,False]中筛选None值?

共有2个答案

金瑞
2023-03-14

对于python3,您可以使用None__ne_uuu要仅删除无,仅使用无进行筛选将删除任何虚假值,如[]、{}0等:

filter(None.__ne__, check(low, high, to_match))

对于python2,您需要添加一个lambda,检查每个元素是否为无

filter(lambda x: x is not None,....)

如果您正在使用python2,请坚持使用列表组件:

[ele for ele in check(low, high, match) if ele is not None]

使用过滤器的任何性能增益都将被lambda调用抵消,因此它实际上会以较慢的速度结束。

诸超
2023-03-14

如果要筛选出None,请使用:

filter(lambda x: x is not None, [list of bools])

或者

[x for x in [list of bools] if x is not None]

filter接受函数,而不是值<代码>过滤器(无,…)是过滤器的简写形式(λx:x,…) --它将过滤掉假y值(强调):

过滤器(函数,可迭代)

iterable的那些元素中构造一个列表,其中function返回trueiterable可以是序列、支持迭代的容器或迭代器。如果iterable是字符串或元组,则结果也具有该类型;否则它总是一个列表。如果函数为None,则假定标识函数,即删除iterable中所有为false的元素。

请注意,过滤器(函数,iterable)相当于[函数中的项对应iterable if函数(item)]如果函数不是None[函数中的项对应iterable if item]如果函数是None

 类似资料:
  • 问题内容: 这可能只是白痴,但对我来说有点混乱: 为什么在返回时返回? 问题答案: 您正在根据布尔值的文字值检查它。一样不会是真的。 如果将其投射,您将看到区别: 究其原因是真实的,因为你是比较相同的对象。与或相同。 当您看到类似的东西并且此检查从未通过时,困难就来了。那是因为您正在检查项目的 真实值 。按照惯例,所有这些项目都将通过布尔检查失败- 也就是说,它们的布尔值将为: (明显) 任何空序

  • 问题内容: 我有一个值列表,需要根据给定的布尔值列表中的值进行过滤: 我使用以下行生成一个新的过滤列表: 结果是: 这条线工作正常,但是(对我而言)看起来有点过大了,我想知道是否有更简单的方法来实现这一目标。 忠告 以下答案提供了两个好的建议: 1-不要像我一样命名列表,因为它是内置函数。 2-不要比较像我做的事情,因为这是不必要的。只需使用就足够了。 问题答案: 您正在寻找: 时序比较(py3.

  • 我知道我可以测试列表是否为空,如下所示: 但我不明白为什么下一个代码不是等效的:

  • 问题内容: 我在Python中有一个布尔列表 我想将其更改为与逻辑相反 的方法吗?在Python中是否有一种内置的方法(类似于call )可以执行此操作,而无需使用手写循环来反转元素? 问题答案: 列表理解很容易: 产量

  • 您好,我正在开发一个游戏和碰撞检测工作。目前,我的方法不允许动态添加元素,正如您所看到的,我正在手动添加冲突节点()。这是我的密码: 我想根据列表中冲突元素的数量动态构建一个。我想以一种方式重新构建它,使其符合

  • 嘿,好吧,所以我在阅读Python的文档,它指出任何空字符串、列表、字典,我想它们都被称为对象(我真的不理解对象的概念:\n如果有人能向我解释,我会很高兴)。无论如何,我的问题是