【发布时间】:2012-11-22 04:45:55
【问题描述】:
我正在尝试学习递归。我试图将一个列表作为参数并返回一个新列表,其中旧列表中的值仅在新列表中出现一次。 我已经这样做了几个小时,但一直卡住。
【问题讨论】:
-
发布删除了所有代码。不再有用。
标签: python list recursion duplicates erase
我正在尝试学习递归。我试图将一个列表作为参数并返回一个新列表,其中旧列表中的值仅在新列表中出现一次。 我已经这样做了几个小时,但一直卡住。
【问题讨论】:
标签: python list recursion duplicates erase
if (old_list[0] not in new_list):
请注意,此时 new_list 将始终为空,因此此条件将始终为真,并且所有元素都将添加到新列表中。
您的代码距离正常运行只有一点点调整。我认为您应该检查它是否在旧列表的其余部分中,而不是检查该项目是否在新列表中:
if (old_list[0] not in old_list[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
看起来这是通过在条件中将 new_list 替换为 old_list[1:] 来解决的
【讨论】:
愚蠢的问题:为什么在 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 级嵌套。一个小问题,但我认为它可能值得扔在那里......
【讨论】: