Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找列表中具有重复元素的元素的最后一个索引_Python - Fatal编程技术网

Python 查找列表中具有重复元素的元素的最后一个索引

Python 查找列表中具有重复元素的元素的最后一个索引,python,Python,我有这样一个列表:[1,12,3,4,4,5,12,15,13,11] 我想找到12的索引,即6。 我尝试过线性方法,但效率不高 item = 12 for i in range(len(mylist)): if mylist[i] == item: index = i return index 有没有什么有效的办法 len(mylist) - list(reversed(mylist)).index(item) - 1 足够了从右向左: mylist = [1,1

我有这样一个列表:[1,12,3,4,4,5,12,15,13,11]

我想找到12的索引,即6。 我尝试过线性方法,但效率不高

item = 12
for i in range(len(mylist)):
    if mylist[i] == item:
        index = i
return index
有没有什么有效的办法

len(mylist) - list(reversed(mylist)).index(item) -  1
足够了

从右向左:

mylist = [1,12,3,4,4,5,12,15,13,11]
item = 12
for i in range(len(mylist)-1,-1,-1):
    if mylist[i] == item:
        index = i
        print(index)
        break

列表中某个元素的最后一次出现与反向列表中该元素的第一次出现相同

因此,原始列表中元素最后一次出现的索引等于列表的长度,即反向列表-1中的索引

您可以使用list.reverse方法来反转列表,然后通过list.index方法在反转的列表中查找所需元素第一次出现的索引

例如:

>>> mylist = [1,12,3,4,4,5,12,15,13,11]
>>> temp = mylist[:]
>>> temp.reverse()
>>> index = len(temp) - temp.index(12) - 1
>>> print(index)
6

返回超出功能范围线性方法有什么问题?也许你可以从右边靠近。但解决方案基本上是线性的。那么你所说的高效是什么意思?我所说的高效是指我们可以对这个应用二进制搜索吗?@KishanMehta不,除非它是有序的。那么是的。最后一次出现,而不是第一次。好的,把它倒过来。查看我的更改您需要将索引转换回常规索引,而不是反向索引。这将提供AttributeError:“listreverseiterator”对象没有属性“index”fix lenmylist-listreversedmylist.indexitem-1这如何比OPs解决方案更有效?@juanpa.arrivillaga感谢您的帮助。我没有注意到。我的错误。但我现在纠正了它。@juanpa.arrivillaga它可能没有OPs解决方案效率高很多,但它提供了一种优雅的方法来解决问题,使用内置python函数,无论何时都比您自己的实现快。@juanpa.arrivillaga指出。再次感谢您在时间和空间复杂性方面采用了最优化的方法:步骤1:从最后一步开始移动原始数组,步骤2:一旦找到给定元素。步骤3:返回索引=l-i-1;其中l=数组的总长度,i=步骤2中元素的索引。