2017-10-11 38 views
1

删除重复我需要删除重复的2ways,一个能够创造出我已经做了一个新的列表:,而无需创建新的列表

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

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

+0

您知道如何从列表中删除元素吗?这会在这里派上用场。 –

回答

1

你可以重用你的功能和用途切片赋值:

lst[:] = remove_extras(lst) 

更成熟的方法来删除重复可以以同样的方式被使用:

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

lst将相同list o之后提出。

+0

为什么要创建一个临时列表? –

+0

@StefanPochmann我不知道你可以使用任何ol'迭代器来分配切片。我会留下它,因为切片分配的变异性质和不同的方法对保存顺序的影响的主要观点无论如何都是清楚的。我会离开它,因为... – schwobaseggl

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)) 
+1

这也使得一个新的列表 – schwobaseggl

0
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] 

输出:

remove(l) 
print l 
[1, 4, 2, 5] 
+0

@schwobaseggl,编辑 –

0

如果需要新的列表字面上是相同的列表,请尝试

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

通过使用条操作员在分配上,列表得到更新,而不是创建一个新的列表

+0

@StefanPochmann我认为我解决了他们两个。 –

0
lst[:] = set(lst) 

演示:

>>> lst = [1, 2, 3, 1, 2, 3] 
>>> lst[:] = set(lst) 
>>> lst 
[1, 2, 3] 
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] 
相关问题