用于求和的Python代码

bei*_*van 4 python sum list slice conditional-statements

任务如下:将列表元素与偶数索引相加,并将结果乘以最后一个列表的elemet.我在Python中有这个oneliner解决方案代码.

array = [-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41] 
print sum(i for i in array if array.index(i) % 2 == 0)*array[-1] if array != [] else 0
Run Code Online (Sandbox Code Playgroud)

我的结果是-1476(计算结果为:41*( - 37-19 + 29 + 3-64 + 36 + 26 + 55 + 84-65))

正确的结果是1968年.

我无法弄清楚为什么这个代码在这种特殊情况下无法正常工作.

sha*_*aan 8

这就是你要找的东西:

array[-1] * sum(array[::2])
Run Code Online (Sandbox Code Playgroud)

array[::2]以2为步长遍历数组从第一个索引到最后一个索引,即每个备用数字.sum(array[::2])从原始列表中获取备用数字的总和.

index只有当您确定列表没有重复时,使用才会按预期工作,这就是您的代码无法提供正确结果的原因.


vau*_*tah 5

>>> sum(x for i, x in enumerate(array) if not i % 2)*array[-1] 
1968
Run Code Online (Sandbox Code Playgroud)

使用内置enumerate函数,因为列表中有重复的元素,并list.index(x)返回第一个元素的索引等于x(如文档所述).另请查看文档enumerate.


YS-*_*S-L 5

列表中有一个重复的元素84,因此array.index不会像您预期的那样工作。此外,您的代码具有不需要的二次复杂度。

要以最少的编辑量修复您的代码,它看起来像这样:

array = [-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41] 
print sum(array[i] for i in range(len(array)) if i % 2 == 0)*array[-1] if array != [] else 0
Run Code Online (Sandbox Code Playgroud)