如果我有变量[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 {?}.")
答案 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]}')