我想在通过numpy.ndarray
测试的if
的几个元素上运行一系列命令。
if
测试为numpy.array
中包含值"nan"
(不是numpy.nan
)的行和列表中定义的一系列字符串设置过滤器。
我的问题是if if测试的第二部分基本上是我编码的方式:
d=numpy.array(whatever data)
filter_list=["..", "..."]
for line in d:
if (("nan" not in line) & ([filter_list[i] not in line for i in range(len(filter_list))]):
"do commands"
所以“nan”部分正在按预期工作,但是另一个测试是通过“..”或“......”在行中找到。
我认为问题来自第二个测试实际返回的语法是[True / False,False / True]组合,其布尔值始终为True
。
总结一下,只关注测试的第二部分:我想要一个单行测试,检查在值列表中没有定义的拒绝字符串。
答案 0 :(得分:2)
boolean_condition & ([<list_comprehension>])
是荒谬的。什么是按位 - 以及bool
和list
?
此外,([ ... ])
部分的长度始终为len(filter_list)
,因此非空,因此布尔值始终为True
。
你应该
&
(懒惰评估,逻辑和)and
(急切评估按位和)
替换
[filter_list[i] not in line for i in range(len(filter_list))]
带
[exp for exp in filter_list if exp not in line]
它应该有用。
一个更好的解决方案,对列表进行惰性评估:
filter_list = ["..", "...", "nan"]
for line in d:
if not any(fi in line for fi in filter_list):
"do commands"