查找列表中除最后一个元素以外的项目的最后一次出现

时间:2019-01-28 05:18:55

标签: python python-3.x

由于某种原因,当尝试查找除最后一个元素之外的最后一个匹配项时,这将无效

len(list) - 1 - list[::-1].index(1)

list = [3, 1, 1, 4, 1, 3, 1, 3, 1]

它需要找到index = 6

为单个列表迭代提供正确答案。

编辑:

如何在两个具有相同索引的列表中找到最后一次出现数字1的索引?

list1 = [3, 1, 1, 4, 1, 3, 1, 3, 1]
list2 = [3, 1, 1, 4, 1, 3, 2, 3, 1]

答案应为index = 4

谢谢

2 个答案:

答案 0 :(得分:0)

我认为您需要:

如果要忽略最后一个元素

lis = [3, 1, 1, 4, 1, 3, 1, 3, 1]

print([i for i,v in enumerate(lis[:-1]) if v==1][-1])
# 6

编辑

l1 = [3, 1, 1, 4, 1, 3, 1, 3, 1]
l2 = [3, 1, 1, 4, 1, 3, 2, 3, 1]

ls1 = [i for i,v in enumerate(l1[:-1]) if v==1]
ls2 = [i for i,v in enumerate(l2[:-1]) if v==1]

val = None
# select the list with higer length here
for i in ls1[::-1]:
    if i in ls2:
        val = i
        break
print(val)
# 4

答案 1 :(得分:0)

index的额外参数可以帮助您简化索引编制:

len(lst) - 1 - lst[::-1].index(1, 1)

由于列表是可逆的,因此可以通过使用迭代器来避免重新分配:

it = reversed(lst)
next(it) # discard last element
len(lst) - 2 - next(ind for ind, elem in it if elem == 1)