2016-06-11 29 views
1

我正在通過Think Python教科書工作,其中一個問題是創建一個函數,該函數需要一個列表並返回一個列表,其中只包含來自原始元素的唯一元素。我到目前爲止是這樣的:函數獲取一個列表並返回一個只包含原始元素的列表?

def remove_duplicates(l): 
    index = 0 
    new_l = [] 
    dup_l = [] 
    while index < len(l): 
     if l[index] in l[index+1:] or l[index] in new_l: 
      dup_l += [l[index]] 
      index = index + 1 
     elif l[index] in dup_l: 
      index = index + 1 
     else: 
      new_l += [l[index]] 
    return new_l 

我覺得必須有寫這個功能更簡潔,Python的方式。有人可以幫助這個初學者程序員嗎?

+0

我讓你回到規範的帖子,關於只返回一個列表,保留命令*的唯一元素。如果順序無關緊要,只需使用'return list(set(l))'。 –

+0

我不同意這個副本,因爲Jeremy似乎在要求一種手動方式,所以我添加了這個答案。標記爲重複如可能會出現不是很新的用戶友好, –

+0

非常感謝你們! –

回答

2

我假設你想手動做,瞭解python語法,所以這是一種做法。

更新有關只出現一次,而不是刪除重複只得到元素提出的意見,你可以更換if條件if L.count(element) == 1:,它將返回[1,2,4]爲您請求。

def unique(L): 
    uniqueElements = [] 
    for element in L: 
     if element not in uniqueElements: 
      uniqueElements.append(element) 
    return uniqueElements 

print(unique([1,2,3,3,4])) 

如果你想進一步深入到Python語法,你可以做一個list comprehension,並進一步簡化它,同時仍然不使用set方法,它失去了元素的順序:

def unique(L): return [element for element in L if L.count(element) == 1] 
+0

嗯,實際上我試圖解決的問題會產生一個列表,它會返回 'print(unique([1,2,3,3,4]))---> [1,2,4] ' 這是因爲我只需要輸入列表中的唯一元素,而不僅僅是刪除重複項的列表。 我的評論格式又如何? –

+0

如果L.count(元素)== 1,則將'if'條件替換爲':'do get'[1,2,4]' –

相關問題