删除列表中的重复项

时间:2018-02-19 07:48:30

标签: python python-3.x python-2.7

如何在python中删除列表中的重复项?我尝试,我得到了。 我使用嵌套循环搜索列表并捕获重复的一个,但我有问题“列出超出范围”,我添加try块忽略它。任何人都可以向我解释为什么我有这个问题以及如何避免它? 我怎么能改进它?

from random import randint
    print("List Befor")
    print()

    g = []
    for i in range(100):
        h = randint(1,100)
        g.append(h)
    print(g)

    print("List After")
    print()

    for i in range(len(g)):
        for j in range(len(g)):
            if i == j:
                continue
            else:
                try:
                    if g[i] == g[j]:
                        g.pop(j)
                except:
                    continue

    print(g)
    print(len(g))

2 个答案:

答案 0 :(得分:4)

您可以简单地使用:

no_duplicates = list(set(your_list))

编辑:如果您不希望订单改名,可以使用OrderedDict

from collections import OrderedDict
no_duplicates = list(OrderedDict.fromkeys(your_list))

答案 1 :(得分:2)

当您删除项目时,列表的长度将变小,但您的for循环仍将迭代到100 - 列表的原始长度。因此,一旦您删除项目时达到更高的索引,您将尝试访问超出范围的项目(因此错误)。

有很多方法可以从列表中删除重复项:Removing duplicates in lists