任务如下:将列表元素与偶数索引相加,并将结果乘以最后一个列表的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
我的结果是-1476(计算结果为:41 *( - 37-19 + 29 + 3-64 + 36 + 26 + 55 + 84-65))
正确的结果是1968年。
我无法弄清楚为什么这段代码在这种特殊情况下无法正常工作。
答案 0 :(得分:7)
这就是你要找的东西:
array[-1] * sum(array[::2])
array[::2]
以2为步长遍历从第一个索引到最后一个索引的数组,即每个备用数字。 sum(array[::2])
从原始列表中获取备用数字的总和。
仅当您确定列表没有重复项时,使用index
才会按预期工作,这就是您的代码无法提供正确结果的原因。
答案 1 :(得分:5)
>>> sum(x for i, x in enumerate(array) if not i % 2)*array[-1]
1968
使用内置的enumerate
函数,因为列表中有重复的元素,而list.index(x)
会返回 first 元素的索引,等于{{1 (如the documentation中所述)。另请查看enumerate
上的文档。
答案 2 :(得分:3)
列表中有一个重复的元素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