【问题标题】:When processing a list a specific value is skipped处理列表时会跳过特定值
【发布时间】:2021-10-08 17:02:31
【问题描述】:
def checkio(array: list) -> int:
    """
    Sums even-indexes elements and multiply at the last
    """
    a = []
    if array:
        for i in array:
            if array.index(i) == 0 or array.index(i) % 2 == 0:
                a.append(i)
        print(a)
        return sum(a) * array[-1]
    else:
        return 0


checkio([-37, -36, -19, -99, 29, 20, 3, -7, -64, 84, 36, 62, 26, -76, 55, -24, 84, 49, -65, 41])

print(a) 的输出为 [-37, -19, 29, 3, -64, 36, 26, 55, -65],但列表中不包含 84。为什么会这样?

【问题讨论】:

标签: python list function


【解决方案1】:

index(i) 方法将始终返回值第一次出现的索引。由于 84 的第一次出现在奇数索引 (9) 处,因此每次遇到它时都会被排除在外,即使在列表的更下方有一个偶数索引 (16) 处的 84。

如果你想在偶数索引处选择值,你可以使用 enumerate() 函数来获取每个项目的索引及其值:

for index,value in enumerate(array):
    if index%2 == 0: 
        a.append(value)

如果您只想将值相加,则无需将它们放在单独的列表中,您可以简单地保留一个运行总计:

total = 0
for index,value in enumerate(array):
    if index%2 == 0: 
        total += value

更简单的方法是在列表上使用跨步下标来仅对偶数索引处的值求和(即步进 2)。您的函数将只有一行:

return sum(array[::2]) * sum(array[-1:]) # zero if array is empty

【讨论】:

    【解决方案2】:

    array.index(i) 将返回 i 第一次出现的索引,因为您有两个 84 但对于两者,它将返回第一个 84 的索引,即 9 奇数。
    使用枚举()

    for i,n in enumerate(array):
        if i % 2 == 0:
            a.append(n)
    

    【讨论】:

      【解决方案3】:

      因为 index(x) 方法返回第一个等于 x 的值的位置,如 Python 文档中所写,您可以在此处找到:

      https://docs.python.org/3/tutorial/datastructures.html

      因此 array.index(84) 将返回 9,因此它不会附加到“a”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        相关资源
        最近更新 更多