这工作但是为什么?

时间:2016-08-17 02:21:32

标签: python

我在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中使用一些print语句运行它,只是得到一个空列表。我只是很好奇,因为当我在脑海中这样做时,没有任何意义,但是codecademy接受这个作为答案。这只是侥幸吗?或者这是我不明白的水平?

3 个答案:

答案 0 :(得分:4)

你是对的:它没有任何意义。首先,它创建一个名为p的列表,该列表获取与自身不相等的每个项目。我所知道的唯一一个与NaN不相同的对象是NaN,但你没有任何这些,所以p只是一个空列表。但是,定义p是没用的,因为它甚至都没有返回。返回的是i,它被分配给最后一个项目,因此它是函数末尾列表中的最后一项。简而言之,该功能相当于:

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

我还没有听说该函数应该返回什么,但也许它应该返回非重复项的数量。如果是的话,那就是"工作"只是因为列表中的最后一项恰好是非重复项目的数量。

答案 1 :(得分:2)

看一下这个代码片段,看看删除重复(good_result)的pythonic方法,并了解你的代码没有任何意义的原因:

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)相同。只是运气好说,它并不意味着你的代码是正确的:)

答案 2 :(得分:1)

您的代码只返回数字的最后一个元素,与

相同
return x[-1]  

它不会返回列表。 我想你需要检查他们可能会问的问题,

a)函数返回列表中的一个复制元素。

b)函数返回列表中重复元素的数量。

对于上述两个问题,你的答案是2,幸运的是答案是正确的。