繁体   English   中英

没有对列表中的最后一个元素进行细化

[英]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)返回iarray第一次出现的索引。 测试数组中值 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM