删除列表中重复项的简单方法

时间:2018-12-31 19:07:51

标签: python-3.x

程序显示“ TypeError:'int'对象不可迭代”

   list=[3,3,2]
   print(list)
   k=0
   for i in list:
       for l in list:
           if(l>i):
        k=l
       for j in k:
           if(i==j):
               del list[i]
   print(list)

5 个答案:

答案 0 :(得分:0)

使用np.unique是实现此目的的简单方法。

l=[3,3,2]
print(np.unique(l))

希望有帮助!

不使用任何numpy,我想到的最简单的方法是从一个新列表开始,然后遍历旧列表并将值附加到新列表中。您可以廉价地跟踪一组已使用的内容。

def delete_duplicates(old_list):
    used = set()
    new_list= []
    for i in old_list:
        if i not in used:
            used.add(i)
            new_list.append(i)
    return new_list

另外,您的代码也有一些技巧。您从for j in k行中收到TypeError,它应该是for j in range(k)。 k只是一个整数,因此您无法对其进行迭代,但是range(k)创建了一个可迭代的函数,可以完成您想要的操作。

答案 1 :(得分:0)

只需建立另一个列表

>>> list1=[3,2,3]
>>> list2=[]
>>> for i in list1:
...  if i in list2:
...   pass
...  else:
...   list2.append(i)
... 
>>> list2
[3, 2]

如果愿意,可以始终在末尾添加list1 = list2

答案 2 :(得分:0)

要删除列表中的重复项并获取具有唯一元素的列表,可以始终使用set(),如下所示:

示例:

>>>list1 = [1,1,2,2,3,3,3]
>>>new_unique_list = list(set(list1)) 
>>> new_unique_list
>>>[1, 2, 3]

答案 3 :(得分:0)

您可以使用set()

t = [3, 3, 2]
print(t)    # prints [3, 3, 2]
t = list(set(t))
print(t)    # prints [2, 3]

答案 4 :(得分:0)

您的代码中包含以下一行会产生错误:

for j in k:

kint,无法迭代。您可能打算写for j in list


已经有几个很好的答案。但是,如果您真的想自己编写代码,我建议您使用函数样式,而不是就地工作(即修改原始数组)。例如,下面的函数基本上是Haskell的Data.List.nub的端口。

def nub(list):
    '''
    Remove duplicate elements from a list.

    Singleton lists and empty lists cannot contain duplicates and are therefore returned immediately. 
    For lists with length gte to two split into head and tail, filter the head from the tail list and then recurse on the filtered list.
    '''
    if len(list) <= 1: return list
    else:
        head, *tail = list 
        return [head] + nub([i for i in tail if i != head])

我认为,这很容易阅读,并且省去了与多个迭代索引相关的麻烦(因为您创建了新列表)。