Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中删除重复项_Python - Fatal编程技术网

Python 从列表中删除重复项

Python 从列表中删除重复项,python,Python,我编写了以下代码以从列表中删除重复项: def remove_duplicates(listy): new_listy = [] for i in range(len(listy)): a = listy.pop(i) while a in listy: listy = listy.remove(a) else: new_listy.append(a) return new_listy 运行代码时

我编写了以下代码以从列表中删除重复项:

def remove_duplicates(listy):
    new_listy = []
    for i in range(len(listy)):
        a = listy.pop(i)
        while a in listy:
            listy = listy.remove(a)

        else: new_listy.append(a)
    return new_listy
运行代码时出现以下错误:

Traceback (most recent call last):
  File "<pyshell#93>", line 1, in <module>
    remove_duplicates([1,1,2,2])
  File "C:\Python27\MIT_4.py", line 4, in remove_duplicates
    a = listy.pop(i)
AttributeError: 'NoneType' object has no attribute 'pop.
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
删除重复项([1,1,2,2])
文件“C:\Python27\MIT_4.py”,第4行,删除重复项
a=利斯蒂·波普(i)
AttributeError:“非类型”对象没有属性“pop”。

是什么导致了这个错误?如何正确解决此问题?

要删除重复项,可以使用set函数

lst = [1,1,1,2,3,4]
print list(set(lst))
输出

[1, 2, 3, 4]

试试这个。我重新安排了你的函数,它会给你想要的结果

list1 = [1,1,2,2,3]
def remove_duplicates(listy):
    new_listy = []
    for i in listy:
        if i not in new_listy:
            new_listy.append(i)
    return new_listy
print remove_duplicates(list1)

Output: [1,2,3]

lista.remove不会创建新的列表,因此不能按如下方式分配结果:

listy = listy.remove(a)
然后listy是None,您在尝试调用None而不是list上的pop()时会出错


代码中还有其他错误。我建议您阅读这些命令的文档,以便更好地理解它们。

要删除重复的命令,如果顺序不重要,您可以使用
set
功能。但是,如果您的目的是学习python,那么了解代码的错误是很重要的

这是非常不和谐的:
对于范围内的i(len(listy)):

改为对列表中的项目使用

使用
a=listy.pop(i)
这种方式会导致问题,因为循环中的列表元素正在被删除。当执行
pop()
时,循环开始时存在的元素将不再可用

删除函数不返回列表!所以这是错误的:
listy=listy.remove(a)

没有必要从listy中删除,因为您正在创建一个新列表。如果希望更新listy,请将函数的返回值指定给listy

删除重复项并返回保留原始顺序的新列表的一种方法:

def remove_duplicates(listy):
    new_listy = []
    for item in listy:
        if item not in new_listy:
            new_listy.append(item)
    return new_listy

请注意,当从listy中删除某个项目时,len(listy)会发生更改;通常我们以相反的方式循环:从len(listy)-1到0您关心元素的顺序吗?如果没有,您可以从原始列表中创建一个
集合
,然后从中创建一个列表;如果顺序很重要,在一般情况下,这将不起作用。我在这里找到了一个: