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