美文网首页
列表去重,保留原来顺序的7种方法

列表去重,保留原来顺序的7种方法

作者: 葡萄柚子茶 | 来源:发表于2019-04-19 10:22 被阅读0次

有道面试题: 将列表 L = [3, 1, 2, 1, 3, 4]去掉重复的元素,但保留原先顺序。 最后结果应该是:[3, 1, 2, 4]

如果不保留顺序的去重,很好处理,比如用set

 L = [3, 1, 4, 2, 3]
 list(set(L))
[1, 2, 3, 4]

如果要保留原先顺序不变,同样也有很多种方法:

方法一:

L = [3, 1, 2, 1, 3, 4]
 T = []
for i in L:
     if not i in T:
         T.append(i)
 T
[3, 1, 2, 4]

方法二:

 L = [3, 1, 2, 1, 3, 4]
T = list(set(L))
T
[1, 2, 3, 4]
T.sort(key=L.index)
T
[3, 1, 2, 4]

方法三:

L = [3, 1, 2, 1, 3, 4]
T = []
 for i,v in enumerate(L):
     if L.index(v) == i:
         T.append(v)
T
[3, 1, 2, 4]

方法四:

L = [3, 1, 2, 1, 3, 4]
T = {}.fromkeys(L).keys()
 T
[1, 2, 3, 4]
 T.sort(key=L.index)
T
[3, 1, 2, 4]

方法五:

L = [3, 1, 2, 1, 3, 4]
T = L[:]
 for i in L:
     while T.count(i) > 1:
         del T[T.index(i)]
 T
[2, 1, 3, 4]
 
 T.sort(key=L.index)
 T
[3, 1, 2, 4]

方法六:

L = [3, 1, 2, 1, 3, 4]
T = sorted(set(L), key=L.index)
T
[3, 1, 2, 4]

方法七:

L = [3, 1, 2, 1, 3, 4]
func = lambda L,i: L if i in L else L + [i]
T = reduce(func, [[], ] + L)
T
[3, 1, 2, 4]

备注:
lambda L,i: L if i in L else L + [i] # 如果元素在列表中,那么返回列表本身,不在的话L + [i]
[[], ] + L # 等价于 [[], L],方便后面计算

相关文章

网友评论

      本文标题:列表去重,保留原来顺序的7种方法

      本文链接:https://www.haomeiwen.com/subject/smifgqtx.html