有人知道我如何在包含重复项和非重复项的python列表中获取重复项的最后索引位置吗?
我有一个列表,以[1, 1, 1, 2, 2, 3, 3, 4, 5]
升序排列
我希望它打印重复项的最后一个索引,并在非重复项上打印这样的索引
2
4
6
7
8
我尝试过这种方式,但是只能打印重复元素的起始索引和错过的非重复项。
id_list = [1, 1, 1, 2, 2, 3, 3, 4, 5] for i in range(len(id_list)): for j in range(i+1,len(id_list)): if id_list[i]==id_list[j]: print(i)
答案 0 :(得分:3)
使用enumerate
在列表上循环以获取索引和值,并使用字典并保留最后一个索引(如果有重复,则最后一个索引“获胜”)。最后,对索引进行排序(因为字典没有顺序,但是您可以使用OrderedDict
):
import collections
lst = [1, 1, 1, 2, 2, 3, 3, 4, 5]
d = collections.OrderedDict()
for i,v in enumerate(lst):
d[v] = i
print(list(d.values()))
打印:
[2, 4, 6, 7, 8]
此解决方案的优点在于,即使重复项不是连续的,它也可以工作。
Python 3.7保证了基本字典的顺序,因此简单的dict理解就可以解决它:
{v:i for i,v in enumerate(lst)}.values()
答案 1 :(得分:3)
您可以使用enumerate
并检查列表中的下一个索引。如果一个元素不等于下一个索引中的元素,则它是最后一个重复项:
lst = [1, 1, 1, 2, 2, 3, 3, 4, 5]
result = [i for i, x in enumerate(lst) if i == len(lst) - 1 or x != lst[i + 1]]
print(result)
# [2, 4, 6, 7, 8]
答案 2 :(得分:0)