lis中最后一个非零元素的返回索引

2024-05-15 20:43:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到的数据格式如下:

[-2, -2, 0, 0, 0, 0, 0]
[-2, 20, -1, 0, 3, 0, 0]

每一行都是不同的输入。列表可能超过7个元素。我需要返回最后一个非零元素的索引位置,因此:

[-2, -2, 0, 0, 0, 0, 0]
>>> 1
[-2, 20, -1, 0, 3, 0, 0]
>>> 4

以下代码在大多数情况下都会执行此操作:

def getIndex(list):
    for element in reversed(list):
        if element != 0:
            return list.index(element)

但是,当有两个相同的数字时,它就不起作用了,就像上面的第一个例子中那样,返回0,因为-2同时位于列表的第0和第1个位置。

那么,即使存在具有相同值的元素,如何获取列表中最后一个非零元素的索引呢?


Tags: 代码in元素列表forindexreturnif
3条回答

清单理解的诀窍在于:

a = [-2, 20, -1, 0, 3, 0, 0]
ls = [i for i, e in enumerate(a) if e != 0]
print(ls)

输出:

[0, 1, 2, 4]

您可以迭代reversed列表并返回第一个不是零的项,如下所示

>>> def get_last_non_zero_index(d, default=None):
...     rev = (len(d) - idx for idx, item in enumerate(reversed(d), 1) if item)
...     return next(rev, default)
...
>>> print(get_last_non_zero_index([-2, -2, 0, 0, 0, 0, 0]))
1
>>> print(get_last_non_zero_index([-2, 20, -1, 0, 3, 0, 0]))
4
>>> print(get_last_non_zero_index([0, 0, 0]))
None
>>> print(get_last_non_zero_index([]))
None

如果函数找不到非零值,则返回default值。

你的解决方案不断地改变列表,我认为即使是简单的for循环也更好:

last_nonzero_index = None
for idx, item in enumerate(originalList):
    if item != 0:
        last_nonzero_index = idx

相关问题 更多 >