如何删除列表中最后一个重复的元素。
例如:a = [1,2,4,5,1,3,5,6]
我尝试删除6号元素和4号元素。但是我只能删除#1和#4。
是否还可以删除索引比第一个索引高的所有重复项?例如a = [ 1,2,1,3,1,4,5]
->删除#2,#4
答案 0 :(得分:0)
从简单的迭代开始,如果您之前看过元素,则进行过滤
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
不会感到难过,但是在这些仅靠迭代就能解决的问题中效率不高
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))
输出
14.6761189173 # numpy
1.08678438189 # for loop
答案 1 :(得分:0)
使用熊猫,您可以删除重复项并传递参数以保留第一个或最后一个实例,然后将其转换为列表:
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,]
吗?
答案 2 :(得分:0)
您可以通过两种基本方法来做到这一点。 首先是利用集合的唯一性,但是请注意,不保留顺序。 第二种方式维持秩序。
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)