如何在any()语句中处理NoneType?

时间:2018-03-21 00:25:03

标签: python arrays any

我在python中有一个any()语句,memo_field数组中的一些元素是None

any(memo_field[1][0] in row[9] for memo_field in memo_fields)

处理数组中NoneType个元素的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以将filter函数应用于memo_fields以删除任何None元素:

any(memo_field[1][0] in row[9] for memo_field in filter(None, memo_fields))

您应该知道,当使用None作为过滤的第一个参数时,memo_fields中的任何值都是假的' (即[],{},False,None)将被删除。在你的情况下,这可能是有利的,但值得注意。

答案 1 :(得分:0)

此声明必须优于上述声明。

any(memo_field[1][0] in row[9] for memo_field in memo_fields if memo_field is not None)

如果它们是None,它将忽略一些memo_fields。它不会忽略这些memo_fields:False,0,[],{},()......

但事实上,我建议你做些更好的事情,比如:

any(memo_field[1][0] in row[9] for memo_field in memo_fields 
    if isinstance(memo_field, (tuple, list)) and 
       len(memo_field) > 1 and 
       isinstance(memo_field[1], (tuple, list)) and 
       len(memo_field[1]) > 0)