Python 3.x 删除列表中重复项的简单方法

Python 3.x 删除列表中重复项的简单方法,python-3.x,Python 3.x,程序显示“TypeError:‘int’对象不可编辑” 一个简单的方法是使用np.unique l=[3,3,2] print(np.unique(l)) 希望有帮助 在不使用任何numpy的情况下,我能想到的最简单的方法是从一个新列表开始,然后在旧列表中循环,并将新的值附加到新列表中。您可以廉价地跟踪已与一套设备一起使用的内容 def delete_duplicates(old_list): used = set() new_list= [] for i in old

程序显示“TypeError:‘int’对象不可编辑”


一个简单的方法是使用
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

此外,还有一些关于代码的提示。您从k中j的
行中得到一个类型错误,范围(k)中j的
应该是
。k只是一个整数,所以不能对其进行迭代,但是
range(k)
创建一个iterable,它可以执行您想要的操作。

只需构建另一个列表即可

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

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

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

例如:

>>>list1 = [1,1,2,2,3,3,3]
>>>new_unique_list = list(set(list1)) 
>>> new_unique_list
>>>[1, 2, 3]
您可以使用
set()


您的代码中有以下生成错误的行:

for j in k:
k
是一个
int
,不能迭代。您可能打算在列表中为j编写


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

def nub(列表):
'''
从列表中删除重复的元素。
单例列表和空列表不能包含重复项,因此会立即返回。
对于长度gte为2的列表,分为头部和尾部,从尾部列表中过滤头部,然后在过滤后的列表上递归。
'''

如果len(list)在python中不是很有经验,但通常在循环数组和删除元素时,最好从末尾开始并减少索引。我认为可能发生的情况是,当您从数组中删除元素时,您正在移动后续元素的索引,但限制并未减少(尤其是在您的情况下,它是在for循环之前设置的)。虽然从数组中的
y
元素开始。。。一旦你删除了一个,你就有了
y-1
,等等,我正在学习,看看这个,它可能会有帮助-这并不能解决我的问题,我被要求使用循环,并限制使用内置的function@Awais我编辑了我的答案以包含一个不使用numpy的答案。
t = [3, 3, 2]
print(t)    # prints [3, 3, 2]
t = list(set(t))
print(t)    # prints [2, 3]
for j in k:
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])