使用递归时,列表不会添加任何新元素

我被要求定义一个函数,该函数接受一个列表并返回另一个列表,同时使用递归。但是,当我运行 else 命令并打印 时lst_,输出显示每次运行时,列表都包含一个元素,而不是一个一个地添加双打。另外,我尽量不使用append()Thoughts?


def double(lst, lst_ = []):

    """

    parameters : lst of type list;

    returns : another list with lst's elements doubled

    """

    if len(lst) == 0:

        return lst_

    else:

        lst[0] = int(lst[0]) + int(lst[0])

        lst_ = lst_ + lst[0:1]            

        print(lst_)

        return double(lst[1:])


print(double([1,2,3,4,5,6,7,8]))

这是输出


[2]

[4]

[6]

[8]

[10]

[12]

[14]

[16]

[]


慕婉清6462132
浏览 198回答 3
3回答

哔哔one

如果想法是在不修改原件的情况下返回副本,我不建议使用可变默认参数。反而,def double(lst):    if not lst:        return []    return [2*lst[0], *double(lst[1:])] # [2*lst[0]] + double(lst[1:]) 递归案例必须返回一个新列表,基本案例将检查并返回一个空列表。lst1 = double([1,2,3,4,5,6,7,8]) print(lst1)[2, 4, 6, 8, 10, 12, 14, 16]如果你想找点乐子,你可以尝试使用yield from(生成器委托)基于生成器的递归解决方案:def double(lst):    if lst:        yield 2*lst[0]        yield from double(lst[1:])lst = list(double([1,2,3,4,5,6,7,8]) )print(lst)[2, 4, 6, 8, 10, 12, 14, 16]

慕森卡

如果您不想使用 append()。然后你可以使用这个解决方案:def double(lst, lst_ = []):    if not lst:        return lst_    else:        return [lst[0] * 2 , *double(lst[1:])]print(double([1,2,3,4,5,6,7,8]))输出将是: [2, 4, 6, 8, 10, 12, 14, 16]以防万一您对 *double(lst[1:]) 调用感到疑惑: *[] 用于解包参数列表。在这里阅读更多。 如果您在没有 * 的情况下调用,您将得到如下输出:[2, [4, [6, [8, [10, [12, [14, [16, []]]]]]]]]另一个简单的解决方案是:def double(lst, lst_ = []):    if not lst:        return lst_    else:        lst[0] = lst[0] * 2        lst_ = lst_.append(lst[0])        return double(lst[1:])print(double([1,2,3,4,5,6,7,8]))

天涯尽头无女友

使用.append()on list 在末尾添加元素:def double(lst, lst_ = []):    """    parameters : lst of type list;    returns : another list with lst's elements doubled    """    if len(lst) == 0:        return lst_    else:        lst[0] += lst[0]        lst_.append(lst[0])                  return double(lst[1:])print(double([1,2,3,4,5,6,7,8]))# [2, 4, 6, 8, 10, 12, 14, 16]另外,请注意,lst[0] = int(lst[0]) + int(lst[0])您代码中的这一行可以缩短为lst[0] += lst[0],因为您只处理整数并且显式转换是多余的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python