1

我正在尝试学习递归。我试图将一个列表作为参数并返回一个新列表,其中旧列表中的值仅在新列表中出现一次。我已经这样做了几个小时,但一直卡住。

4

3 回答 3

2
if (old_list[0] not in new_list):

请注意,此时 new_list 将始终为空,因此此条件将始终为真,并且所有元素都将添加到新列表中。

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

if (old_list[0] not in old_list[1:]):
于 2012-11-22T04:52:15.800 回答
1

我相信问题出在第二个 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 

看起来这通过在条件中用 old_list[1:] 替换 new_list 来解决它

于 2012-11-22T04:51:35.277 回答
0

愚蠢的问题:为什么在 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 级嵌套。一个小问题,但我认为它可能值得扔在那里......

于 2012-11-22T05:51:04.100 回答