【问题标题】:Python: Remove duplicates in a list pass into new list (Recursion)Python:删除列表中的重复项传递到新列表(递归)
【发布时间】:2012-11-22 04:45:55
【问题描述】:

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

【问题讨论】:

  • 发布删除了所有代码。不再有用。

标签: python list recursion duplicates erase


【解决方案1】:
if (old_list[0] not in new_list):

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

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

if (old_list[0] not in old_list[1:]):

【讨论】:

    【解决方案2】:

    我认为问题出在第二个 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:] 来解决的

    【讨论】:

    • 你为他做了功课,但没有真正解释他做错了什么,或者为什么做错了。
    • 不,我刚刚意识到感谢上面的帖子和这个。我的 if 语句总是评估为真。因为我正在检查 old_list[0] 和 new_list ,它一开始是空的。所以现在它检查 old_list[0] 是否在 old_list[1:] 中。如果 old_list[0] 不在 old_list[1:] 中,则执行该块并进行递归调用。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2017-02-21
      • 2016-01-12
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多