2016-08-17 146 views
4

我在Codecademy網站性學習的Python和跨越這個解決方案來爲的意思從號碼列表中刪除重複項功能:這工作,但爲什麼?

x = [1, 1, 2, 2] 

def remove_duplicates(x): 
    p = [] 
    for i in x: 
     if i != i: 
      p.append(i) 
    return i 

我與一些打印語句跑這pycharm,只是得到了一個空列表。我只是好奇,因爲當我在腦子裏這樣做的時候,這沒有任何意義,但codecademy接受這個答案。這只是一種僥倖嗎?或者這是我不明白的水平?

+2

這可能只用於過濾NaNs,如果你返回'p',否則沒有意義。 – karakfa

+0

對我也沒有意義。 – technico

+0

我的腦袋也撓了。 – Eduard

回答

4

你是對的:它沒有任何意義。首先,它創建一個名爲p的列表,獲取與自身不相等的每個項目。我知道的唯一對象並不等於NaN,但你沒有這些,所以p只是一個空的列表。但是,定義p是無用的,因爲它甚至沒有被返回。返回的結果是i,它被分配給最後的每個項目,因此它是函數結束時列表中的最後一個項目。總之,該功能就相當於這樣的:我還沒有聽說

def remove_duplicates(x): 
    return x[-1] 

什麼功能應該返回,但也許它應該返回的非重複的項目數量。如果是這樣,它就「起作用」,只是因爲列表中的最後一個項目碰巧是非重複項目的數量。

+0

即使列表爲空。雖然不是* x * -1錯誤* *。 – jpmc26

+0

感謝您確認我的懷疑,zondo。 –

+0

@ jpmc26:確實是一個'NameError'。我想我應該說*大致相當。 – zondo

2

看看這個片段看到Python的方式來刪除重複(good_result),也明白爲什麼你的代碼沒有任何意義:

x = [1, 1, 2, 2] 


def remove_duplicates(x): 
    p = [] 
    for i in x: 
     if i != i: 
      p.append(i) 
    return i 

good_result = list(set(x)) 
print good_result 
print remove_duplicates(x) 

正如你所看到的,你的功能不返回沒有重複值的過濾列表,它只是返回列表的最後一個元素(index = -1)。所以codeacademy不應該接受這個片段作爲肯定的問題how to remove duplicateds from a list的有效答案。

現在,如果我們假設codeacademy實際上要求的是the number of unique values from a list,那麼您的破損代碼會給出正確的答案,這與len(good_result)相同。這只是工作的運氣只是說,這並不意味着你的代碼是正確的:)

+0

謝謝,BPL。你的解決方案與我見過的很多相似。不知道那傢伙在想什麼,或者爲什麼它可以被接受爲答案。 –

+0

@ThomasCho我既不......我編輯了我的評論,增加了一些可疑的我已經知道爲什麼codeacademy證實了錯誤的答案是正確的 – BPL

1

你的代碼只是返回數字的最後一個元素,那就是同

return x[-1] 

它不返回一個列表。 我認爲你需要檢查他們可能會問的問題,

a)函數返回列表中的一個重複元素。

b)函數返回列表中沒有重複元素。

對於上述兩個問題,您的答案是2,運氣好的答案是正確的。

相關問題