如何在python列表中测试空列表条目

How do I test for null list entry in python list

我有一个python列表[1,2,,4,5,6]。测试缺少的或null列表元素的最佳方法是什么?我目前正在执行if element != '',但我认为有一个内置测试来执行这样的操作,还是我错了?


I have a python list [1,2,,4,5,6]. What is the best method for testing
for the missing, or null, list element?

如果您只想知道列表中是否包含假值(这是Python中丢失或空值的最佳等效值),可以这样做:

1
2
3
4
5
6
>>> all(x for x in [1,2,3,4,5])
True
>>> all(x for x in [1,2,'',4,5])
False
>>> all(x for x in [1,2,None,4,5])
False

如果要知道是否存在与某些条件匹配的特定值:

1
all(x%2 for x in [1,2,3,4,5,7])

如果列表包含所有偶数,则为真。


如果您的列表是[1, 2, None, 4, 5, 6],那么您只需检查None in lst,例如:

1
2
3
>>> lst = [1, 2, None, 4, 5, 6]
>>> None in lst
True

同样,如果您有其他表示"丢失"条目的值,您可以只检查whatever in lst


检查Nonenull的方法有:

1
2
3
4
5
if element:
    # This is not null

if not element:
    # This is null

关于if not xif x == None之间的区别有一个非常详细的答案。

编辑1:

结合评论和其他答案:

假值

python将以下内容视为False源:

  • None
  • False
  • 任何数字类型的零,如:00L0.00j
  • 任何空序列,如:''()[]
  • 任何空映射,如:{}
  • 如果类定义了__nonzero__()或ocx1〔19〕方法,当该方法返回整数zero或bool值False时,用户定义类的实例。

真值

所有其他值被认为是True

你的问题:

如果您确实在检查清单中是否有None([1,2,None,4,5,6]),那么@poke的回答是正确的:

1
2
3
>>> lst = [1, 2, None, 4, 5, 6]
>>> None in lst
True

如果您想检查元素是否只有None,那么@esauro在注释中是正确的:

1
2
3
4
5
>>> lst = [1, 2, None, 4, 5, 6]
>>> for x in lst:
...  if not x:
...    print(x)
None

但如果你的lst包含0(lst=[0,1,2,4,5,6]),那么你的输出将是0

唯一能绕过这个问题的方法是明确检查if element is Noneif element is not None


查找存在None的所有索引:

1
[i for i, item in enumerate(mylist) if item is None]

示例输出:

1
2
3
>>> mylist = [1, 2, None, 4, 5, 6, None, None]
>>> [i for i, item in enumerate(mylist) if item is None]
[2, 6, 7]