删除重复项而不创建新列表

时间:2017-10-11 10:43:19

标签: python list duplicates

我需要删除2路中的重复项,其中一个能够创建一个我已完成的新列表:

def remove_extras(lst):
    new_list = []
    for number in list:
       if number not in new_list:
           new_list.append(number)
    return new_list

我需要第二种方法,我不创建新列表(订单不需要保留)。我尝试使用set但它与原始列表不同,因此没有通过测试。任何人有任何提示或解决方案?感谢

6 个答案:

答案 0 :(得分:1)

您可以重复使用您的函数并使用切片分配:

lst[:] = remove_extras(lst)

可以以相同的方式使用更加确定的删除重复项的方法:

lst[:] = list(set(lst))  # order not preserved
lst[:] = list(OrderedDict.fromkeys(lst))  # order preserved

lst之后将成为同一个list对象。

答案 1 :(得分:0)

请执行以下操作:

old_list = [1,1,2,2,3,3]

# create a new list
new_list = list(set(old_list))

# modify old list
old_list = list(set(old_list))

答案 2 :(得分:0)

iso

输入:

def remove(lst):
    seen = set()
    def unseen():
        for val in lst:
            if not val in seen:
                yield val
                seen.add(val)
    lst[:] = unseen()
    return lst

输出:

l = [1,4,2,5,2,2]

答案 3 :(得分:0)

如果您需要新列表确实是相同的列表,请尝试

data[:] = list(set(data))

通过在赋值时使用切片运算符,列表会更新到位,而不是创建新列表

答案 4 :(得分:0)

lst[:] = set(lst)

演示:

>>> lst = [1, 2, 3, 1, 2, 3]
>>> lst[:] = set(lst)
>>> lst
[1, 2, 3]

答案 5 :(得分:0)

由于您明确要求不创建新的list对象,因此您可以迭代列表中的项目集,并从列表中删除项目计数大于1的实例。

x_list = [1,1,2,2,3,3]

for x in set(x_list):
    for i in range(1, x_list.count(x)):
        x_list.remove(x)

x_list
[1, 2, 3]