Python在列表中查找非零数的第一个实例
我有一张这样的清单Python在列表中查找非零数的第一个实例,python,list,Python,List,我有一张这样的清单 myList = [0.0 , 0.0, 0.0, 2.0, 2.0] 我想找出列表中第一个不等于零的数字的位置 myList.index(2.0) 在本例中有效,但有时第一个非零数将为1或3 有没有快速的方法可以做到这一点?使用next和enumerate: >>> myList = [0.0 , 0.0, 0.0, 2.0, 2.0] >>> next((i for i, x in enumerate(myList) if x),
myList = [0.0 , 0.0, 0.0, 2.0, 2.0]
我想找出列表中第一个不等于零的数字的位置
myList.index(2.0)
在本例中有效,但有时第一个非零数将为1或3
有没有快速的方法可以做到这一点?使用
next
和enumerate
:
>>> myList = [0.0 , 0.0, 0.0, 2.0, 2.0]
>>> next((i for i, x in enumerate(myList) if x), None) # x!= 0 for strict match
3
只需使用列表:
myDict = {x: index for index, x in enumerate(myList) if x}
非零元素的索引是
myDict[element]
使用enumerate怎么样?检查文档
def first_non_zero(mylist):
for index, number in enumerate(mylist):
if number != 0: # or 'if number:'
return index
这里有一个简单的例子:
val = next((index for index,value in enumerate(myList) if value != 0), None)
基本上,它用于查找第一个值,如果没有,则返回None
。用于生成一个迭代器,该迭代器对索引、值元组进行迭代,以便我们知道所处的索引。使用
Python 2:
myList=[0.0,0.0,0.0,2.0,2.0]
myList2=[0.0,0.0]
myList.index(过滤器(lambda x:x!=0,myList)[0])#3
myList2.索引(筛选器(lambda x:x!=0,myList2)[0])#索引器
Python 3:(感谢Matthias的评论):
myList.index(下一个(过滤器(lambda x:x!=0,myList))#3
myList2.index(下一个(过滤器(lambda x:x!=0,myList2))#停止迭代
您必须处理特殊情况。您可以使用numpy.nonzero:
当数组较大时,将
next
与enumerate
一起使用非常好。对于较小的数组,我将使用numpy
中的argmax
,这样就不需要循环:
这个怎么样:
[i for i, x in enumerate(myList) if x][0]
做以下事情怎么样:
print (np.nonzero(np.array(myList))[0][0])
这更方便,因为除了查找非零值,这也有助于直接应用逻辑函数。例如:
print (np.nonzero(np.array(myList)>1))
只是在与浮点数进行比较时要小心。我怀疑你得到了很多反对票,因为你的问题没有证明你符合要求。这只是一个对将来的问题有用的提示。同时,这也是一个对反对者有用的提示,让用户知道你为什么反对投票,以便他们可以进行更正。相关:,这并没有给出索引,它只是从列表中筛选出非零元素。也是一个很好的选择,与
next
的主要区别在于next
提供了一个默认值,而这会引发一个异常。对于Python3,您可以使用myList.index(next(filter(lambda x:x!=0,myList))
我最喜欢这个答案,但在Matthias mod中使用“next”。注意,在任何情况下,根据情况,首先应该考虑任何(MyLIST)的测试,以确保至少有一个非零值。它可能有助于程序流和避免异常。这将找不到第一个非零元素,例如对于[0,0,1,2]
。对于numpy数组,什么是等效的?
[i for i, x in enumerate(myList) if x][0]
print (np.nonzero(np.array(myList))[0][0])
print (np.nonzero(np.array(myList)>1))