我正在尝试学习递归。我试图将一个列表作为参数并返回一个新列表,其中旧列表中的值仅在新列表中出现一次。我已经这样做了几个小时,但一直卡住。
问问题
4890 次
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 回答