为什么这两个功能没有给我相同的答案?

why is this two functions not giving me the same answer?

编写一个名为 append_sum 的函数,它有一个参数——一个名为 named lst 的列表。 该函数应将 lst 的最后两个元素相加并将结果附加到 lst。它应该执行此过程三次,然后 return 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]

考虑: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])

如果您对某些 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