程序显示“ 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)
答案 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:
k
是int
,无法迭代。您可能打算写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])
我认为,这很容易阅读,并且省去了与多个迭代索引相关的麻烦(因为您创建了新列表)。