如何删除列表中最后一个重复的Element。
例如:a = [1,2,4,5,1,3,5,6]
我尝试删除元素#6和元素#4。但我只能删除#1和#4。
是否也可以删除索引高于第一个索引的所有重复项?例如a = [ 1,2,1,3,1,4,5]
-->删除#2、#4
使用panda,您可以删除重复项并传入参数以保留第一个或最后一个实例,然后将其转换为列表:
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,]
?
这里有两种基本的方法。首先是利用集合的唯一性,但请注意,顺序没有保留。第二种方式维持秩序。
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)
从简单的迭代开始,如果您在之前看到了元素,请过滤掉
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