编辑:在阅读了建议的链接后,我不知道为什么这被标记为重复。告我。
有人能帮我理解为什么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
值?
对于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调用抵消,因此它实际上会以较慢的速度结束。
如果要筛选出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如果有人能向我解释,我会很高兴)。无论如何,我的问题是