2017-10-11 34 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] 
相關問題