Python 仅保留列表中第一个出现的元素

Python 仅保留列表中第一个出现的元素,python,Python,如何删除列表中的最后一个重复元素 例如:a=[1,2,4,5,1,3,5,6] 我尝试删除元素6和元素4。但是我只能删除1和4 是否也可以删除索引高于第一个索引的所有副本?e、 g.a=[1,2,1,3,1,4,5]->删除2,4从简单的迭代开始,如果您以前见过该元素,请过滤掉 a=[1,2,4,5,1,3,5,6] def removeDuplicates(listofElements): uniqueList = [] for elem in listofElements:

如何删除列表中的最后一个重复元素

例如:a=[1,2,4,5,1,3,5,6]

我尝试删除元素6和元素4。但是我只能删除1和4


是否也可以删除索引高于第一个索引的所有副本?e、 g.a=[1,2,1,3,1,4,5]->删除2,4

从简单的迭代开始,如果您以前见过该元素,请过滤掉

a=[1,2,4,5,1,3,5,6]

def removeDuplicates(listofElements):
    uniqueList = []
    for elem in listofElements:
        if elem not in uniqueList:
            uniqueList.append(elem)

    return uniqueList

removeDuplicates(a)
显然,对于numpy来说没有什么困难,但是对于这些仅仅通过迭代就可以解决的问题,numpy是没有效率的

from timeit import timeit
def use_numpy(a):
    x, ix = np.unique(a, return_index=True)
    np.array(a)[sorted(ix)].tolist()
以上代码取自@nixon发布的答案

print(timeit('use_numpy(a)',setup='from __main__ import use_numpy; import numpy as np;a = [1,2,4,5,1,3,5,6]',number=1000000))
print(timeit('removeDuplicates(a)',setup='from __main__ import removeDuplicates; import numpy as np;a = [1,2,4,5,1,3,5,6]',number=1000000))
输出


使用pandas,可以删除重复项并传入参数以保留第一个或最后一个实例,然后将其转换为列表:

import pandas as pd

a = [1,2,4,5,1,3,5,6]

df = pd.DataFrame(a, columns=['a'])

a_keep_first = list(df.drop_duplicates(keep="first")['a'])
print (a_keep_first)
# output: [1, 2, 4, 5, 3, 6]


a_keep_last = list(df.drop_duplicates(keep="last")['a'])
print (a_keep_last)
# output: [2, 4, 1, 3, 5, 6]
但是,这是假设您不想要重复的。它提出了另一个问题:如果有两个以上的副本,会发生什么?如果你想在有3个副本的情况下删除最后一个副本,这是否意味着你剩下2个副本

给定:a=[1,2,4,5,1,3,5,6,1]


您想要:a=[1,2,4,5,1,3,6]还是a=[1,2,4,5,3,6,6]?

这里有两种基本方法。 首先是利用集合的唯一性,但请注意,并没有保持顺序。 第二种方式维持秩序

list_num = [1,2,1,3,1,4,5]
unique_set = set(); # sets don't allow duplicates
for n in list_num:
    unique_set.add(n)    
unique_list_1 = list(unique_set)


unique_list_2 = []
for n in list_num:
    if n not in unique_list_2:
        unique_list_2.append(n)

我真的很想帮忙,但我不知道你在说什么。当你说元素6时,你是指第六个元素,还是值为6的元素?欢迎使用堆栈溢出!请阅读注册时建议的,并浏览。如果你写了一些代码,但它不起作用,最好将它添加到你的帖子中。一旦你删除了一个元素,列表的大小就会改变,因此索引也会改变。因此,删除一个元素之前的第四个索引将是删除后的第三个索引。这适用于所有国家indices@nixon只是好奇什么是手动迭代?如果您所指的for循环是手动过程,那么导入numpy库也是如此。只是说,不管手册怎么说,我显然是在引用一个for循环,如果列表包含不可损坏的数据类型,这可能无法解决问题。请您更新答案
list_num = [1,2,1,3,1,4,5]
unique_set = set(); # sets don't allow duplicates
for n in list_num:
    unique_set.add(n)    
unique_list_1 = list(unique_set)


unique_list_2 = []
for n in list_num:
    if n not in unique_list_2:
        unique_list_2.append(n)