Python:如何有效地探查哪一个是None?

时间:2019-07-09 12:06:16

标签: python null

如果我有变量[A, B, C, D]的列表。如何有效找到哪个是None

我有

if None in (A, B, C, D):
    ValueError("None found.")

但是它仅测试其中是否没有None,并且无法找到它。我可以使用for循环轻松找到它,但是请不要这样做...我需要的是

if None in (A, B, C, D):
    # Find where is None
    ValueError("None found in {?}.")

4 个答案:

答案 0 :(得分:7)

说您有此列表:

x = [3, 5, None, 2, None]

如果您想要第一个无:

x.index(None)  

输出2,最左边的None的索引。

如果要获取None s的所有索引:

[i for i, v in enumerate(x) if v is None]  

输出[2, 4],列表中所有None的索引。

答案 1 :(得分:1)

您可以使用索引而不是循环:

(A, B, C, D).index(None)


print((1, None, 2, 1).index(None))
>> 1
print((1, 2, None, 1).index(None))
>> 2

答案 2 :(得分:0)

您也可以通过列表理解来做到这一点:

data = [3, 1, 2, None, 2, None]

print ([i for i in range(len(data)) if data[i]==None])

输出:

[3, 5]

答案 3 :(得分:0)

您快到了。使用序列具有index方法的事实来进行搜索:

mylist = [A, B , C, D]
try:
    index = mylist.index(None)
except ValueError:
    pass
else:
    raise ValueError(f'None found in {index}')

如果要报告名称而不是索引,则可以使用序列进行反向查找:

names = ['A', 'B', 'C', 'D']
raise ValueError(f'None found in {names[index]}')