【问题标题】:why is this two functions not giving me the same answer?为什么这两个函数没有给我相同的答案?
【发布时间】:2021-11-18 09:21:28
【问题描述】:

编写一个名为 append_sum 的函数,它有一个参数——一个名为 lst 的列表。 该函数应将 lst 的最后两个元素加在一起并将结果附加到 lst。它应该执行此过程 3 次,然后返回 lst。 例如,如果 lst 以 [1, 1, 2] 开头,则最终结果应为 [1, 1, 2, 3, 5, 8]。

解决方案-1

def append_sum(lst):
   lst.append(lst[2] + lst[1])
   lst.append(lst[2] + lst[1])
   lst.append(lst[2] + lst[1])
   return lst
print(append_sum([1, 1, 2]))

ans = [1, 1, 2, 3, 3, 3]

解决方案 2

def append_sum(lst):
  lst.append(lst[-1] + lst[-2])
  lst.append(lst[-1] + lst[-2])
  lst.append(lst[-1] + lst[-2])
  return lst
print(append_sum([1, 1, 2]))

ans = [1, 1, 2, 3, 5, 8]

【问题讨论】:

    标签: python list function append


    【解决方案1】:

    考虑:lst[2] 是一个绝对 索引,而lst[-1] 是一个相对 索引,基于列表的长度。如果列表超过 3 个元素(lst[2] 可以工作),那么无论列表有多大,lst[2] 仍然会给出相同的答案。但是,如果您从可以扩展的列表末尾计算索引,则情况并非如此。

    这很容易显示:

    a = [1, 2, 3]
    
    for x in range(4, 10):
        a.append(x)
        print("Forward index value", a[2])
        print("Reverse index value", a[-1])
    

    【讨论】:

    • 你能解释更多吗?如果可以的话,婴儿步骤
    • @Fahad 你试过运行我展示的代码吗?
    • 如果只对最后两项感兴趣 - 那么最好使用`lst[-2:]`。
    • 是的,我已经运行过了。没关系,我明白发生了什么谢谢@roganjosh
    【解决方案2】:

    如果您对某些 python 行为感到困惑,添加 print 并查看发生了什么通常很有用,请在您的代码中运行以下代码并尝试推断为什么行为与您想要的不同

    def append_sum(lst):
       print(lst,lst[2],lst[1])
       lst.append(lst[2] + lst[1])
       print(lst,lst[2],lst[1])
       lst.append(lst[2] + lst[1])
       print(lst,lst[2],lst[1])
       lst.append(lst[2] + lst[1])
       print(lst)
       return lst
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2017-01-11
      相关资源
      最近更新 更多