为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2021-08-14 19:31:16
我被要求定义一个函数,该函数接受一个列表并返回另一个列表,同时使用递归。但是,当我运行 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][]
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

如果想法是在不修改原件的情况下返回副本,我不建议使用可变默认参数。


反而,


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]


查看完整回答
反对 回复 2021-08-14
?
慕森卡

TA贡献1806条经验 获得超8个赞

如果您不想使用 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]))


查看完整回答
反对 回复 2021-08-14
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

使用.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],因为您只处理整数并且显式转换是多余的。


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信