2016-08-17 105 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,运气好的答案是正确的。

相关问题