我想编写一个函数,它接受一个列表并返回它,删除所有重复项,而不创建另一个列表或字符串

时间:2017-05-08 22:06:05

标签: python

我试过这个,它给出了它应该给出的输出([1,3,2]),但问题是它不停地打印输出无限次,是否有任何解决方案不改变想法代码。

a= [1,2,2,2,1,3,2]
def rem_dup(L):
    while len(L):
        for i in L:
            y= L.count(i)
            if y>1:
                L.remove(i)  
        print L 
rem_dup(a)

4 个答案:

答案 0 :(得分:2)

除非这个功能的目的是锻炼你的python技能,否则听起来你想要一个set。集合类似于列表但不允许重复值。如果您希望最终的数据结构成为列表,可以执行以下操作:

final_list = list(set(original_list))

答案 1 :(得分:2)

安全地执行此操作的一种方法是反向循环遍历列表并仅从后面删除:

>>> for i in range(len(a) - 1, -1, -1):
...    if a.count(a[i]) > 1:
...       del a[i]
...
>>> a
[1, 2, 3]

但这将是多项式时间,因为a.count是线性的,因此del a[i]

答案 2 :(得分:1)

while len(L)只要L有一些东西开始就一直都是真的

for循环中使用它时修改L会导致跳过项目,因此您有一些输入错误。

如果您解决了这个问题,则不应该使用while循环。

答案 3 :(得分:0)

只要a中的项目是可以播放的,并且您不介意在开始时其余项目的顺序不同,您可以创建一个中级{{1}并原位替换原始内容。

set