带条件求和的Python代码
这个任务是这样的:把列表中所有偶数位置的元素加起来,然后把这个结果乘以列表最后一个元素。我在Python中写了一个一行代码的解决方案。
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
我得到的结果是-1476(计算过程是:41 * (-37 - 19 + 29 + 3 - 64 + 36 + 26 + 55 + 84 - 65))。
正确的结果应该是1968。
我搞不明白为什么这段代码在这个特定情况下不正确。
3 个回答
9
这就是你想要的内容:
array[-1] * sum(array[::2])
array[::2]
是从数组的第一个位置开始,每隔一个位置取一个数,也就是每隔一个数字取一次。sum(array[::2])
就是把原始列表中这些每隔一个取到的数字加起来。
使用 index
这个方法只有在你确定列表里没有重复数字的时候才会正常工作,这就是你代码无法得到正确结果的原因。
6
在这个列表中,有一个重复的元素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