查找数组中第一个非零的数字(零可以在任何地方)



假设我们有一个数组:x = [10,0,30,40]。我想提取第一个非零元素并将其存储在一个不同的变量中,比如y。本例中为"y = 10"。我们也可以有多个零,x = [0,0,30,40],这应该给y = 30作为提取值。

我尝试了一个像这样的Python代码片段:

i = 0
while x[i] != 0:
y = arr[i]
if x[i] == 0:
break

此操作仅在数组为[10,0,30,40]时有效。它不工作,如果我有0,20,30,40。循环会在那之前停止。实现这一点的有效方法是什么?我尽量不使用任何特殊的Numpy函数,只使用通用的循环,因为我可能需要将其移植到其他语言。

你可以这样做

x = [10,0,30,40]
for var in x:
if var != 0:
y = var
break

您可以使用列表推导来获取所有非零值,然后在存在非零值的情况下提取第一个

x = [10,0,30,40]
lst = [v for v in x if v != 0]
if lst:
y = lst[0]
print(y)

你的代码的问题是,你不增加i,所以它卡住了第一个元素。因此,为了保持代码的可移植性,您可以这样做:

while x[i] != 0:
y = x[i]
if x[i] == 0:
break
i+=1

这段代码仍然不干净,因为如果你的数组中没有0,那么你会得到一个IndexError,只要你到达结束。

我对这个有点陌生,但我认为这应该可以工作:

x = [0, 12, 24, 32, 0, 11]
y = []
for num in x:
if num != 0:
y.append(num)
break
print(y)

您可以使用下一个函数:

x = [10,0,30,40]
next(n for n in x if n) # 10
x = [0,0,30,40]
next(n for n in x if n) # 30

如果需要支持列表中不存在零,可以使用next()函数的第二个形参:

x = [0,0,0,0]
next((n for n in x if n),0) # 0

相关内容

最新更新