[英]Not fining last element in list
我想要做的是获取列表的偶数索引,然后将它们相加,最后将总数与列表中的最后一个元素相乘。 当我尝试使用一组负数时,它突然与 index[1] 相乘
def checkio(array: list) -> int:
"""
sums even-indexes elements and multiply at the last
"""
total = 0
evennumbs = []
if len(array) == 0:
return 0
for i in array:
if array.index(i) % 2 == 0:
evennumbs.append(i)
for e in evennumbs:
#print(total, " + ", e, " = ")
total += e
print(evennumbs)
print(total)
total = total * array[-1]
return total
# These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
(checkio([-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41]))
#assert checkio([0, 1, 2, 3, 4, 5]) == 30, "(0+2+4)*5=30"
#assert checkio([1, 3, 5]) == 30, "(1+5)*5=30"
#assert checkio([6]) == 36, "(6)*6=36"
#assert checkio([]) == 0, "An empty array = 0"
这是我得到的 output
[-37, -19, 29, 3, -64, 36, 26, 55, -65]
-36
-36 是它乘以的数字,而不是 41。
你的 function 使用切片会被简化很多:
def checkio(array: list) -> int:
if not array:
return 0
return sum(array[::2])*array[-1]
assert checkio([0, 1, 2, 3, 4, 5]) == 30, "(0+2+4)*5=30"
assert checkio([1, 3, 5]) == 30, "(1+5)*5=30"
assert checkio([6]) == 36, "(6)*6=36"
assert checkio([]) == 0, "An empty array = 0"
除了您的解决方案中无用的循环需求之外,这一点尤其不正确:
for i in array:
if array.index(i) % 2 == 0:
evennumbs.append(i)
这将在[1,2,3,3]
或[1,2,2,3]
等输入上失败,因为list.index
总是返回第一次出现
array.index(i)
返回i
在array
中第一次出现的索引。 测试数组中值 84 的第一次出现是在奇数索引上,尽管它后来也出现在偶数索引上,因此您正在丢失它。
您可能应该直接遍历索引。
for i in range(0, len(array)+1, 2):
evennumbs.append(array[i])
但是,当然,这可以简化为
evennumbs = array[::2]
所以整个 function 可以简化为
from typing import List
def checkio(array: List[int]) -> int:
if len(array) == 0:
return 0
return sum(array[::2]) * array[-1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.