Python:删除列表传递到新列表中的重复项(递归)

Python:删除列表传递到新列表中的重复项(递归),python,list,recursion,duplicates,erase,Python,List,Recursion,Duplicates,Erase,我正在努力学习递归。我试图将列表作为参数,并返回一个新列表,其中旧列表中的值在新列表中只出现一次。 我已经做了好几个小时了,但还是被卡住了 我认为问题出在第二个if声明中: def bag_to_set(old_list): new_list = [] if old_list == []: new_list = [] else: if (old_list[0] not in old_list[1:]): new_li

我正在努力学习递归。我试图将列表作为参数,并返回一个新列表,其中旧列表中的值在新列表中只出现一次。
我已经做了好几个小时了,但还是被卡住了

我认为问题出在第二个if声明中:

def bag_to_set(old_list):
    new_list = []
    if old_list == []:
        new_list = []
    else:
        if (old_list[0] not in old_list[1:]):
            new_list = [old_list[0]] + bag_to_set(old_list[1:])
        else:
            new_list = bag_to_set(old_list[1:])
    return new_list 
看起来这可以通过在条件语句中用旧的_列表[1:]替换新的_列表来修复它

if (old_list[0] not in new_list):
请注意,此时新列表将始终为空,因此此条件将始终为真,并且所有元素都将添加到新列表中

您的代码离正常运行还有一点距离。我认为您应该检查该项目是否在旧列表的其余部分,而不是检查该项目是否在新列表中:


愚蠢的问题:为什么在else之后有第二个if?我认为这样说可能会更流畅一些:

if old_list == []:
  new_list == []
elif old_list[0] not in old_list[1:]:
   new_list = [old_list[0]] + bag_to_set(old_list[1:])
else: 
   new_list = [old_list[0]] + bag_to_set(old_list[1:])

这样可以避免1级嵌套。这是一个小问题,但我认为可能值得一提……

你为他做了家庭作业,但没有真正解释他做错了什么,或者为什么做错了。不,我只是意识到多亏了上面的帖子和这篇文章。我的if语句的计算结果始终为true。因为我正在检查旧的\u列表[0]和新的\u列表,新的\u列表在开始时是空的。因此,现在它检查旧_列表[0]是否在旧_列表[1:]中。如果old_list[0]不在old_list[1:]中,则执行块并执行递归调用。Post已删除所有代码。不再有用了。
if old_list == []:
  new_list == []
elif old_list[0] not in old_list[1:]:
   new_list = [old_list[0]] + bag_to_set(old_list[1:])
else: 
   new_list = [old_list[0]] + bag_to_set(old_list[1:])