if测试中的一行“for”循环

时间:2014-02-24 18:46:48

标签: python if-statement numpy

我想在通过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

总结一下,只关注测试的第二部分:我想要一个单行测试,检查在值列表中没有定义的拒绝字符串。

1 个答案:

答案 0 :(得分:2)

boolean_condition & ([<list_comprehension>])是荒谬的。什么是按位 - 以及boollist

此外,([ ... ])部分的长度始终为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"