当 Python 列表的索引在开始和结束处混合时如何获取值

问题描述 投票:0回答:1

我试图对列表执行简单的移动平均值,其特殊性是列表的末尾是其自身的开始,但是,例如,使用 3 个样本从 1 到 9 的列表时,我尝试:

original_list = [*range(1,10)]

print(sum(original_list[-1:2])/3) 

输出为 0.0,应为 (9+1+2)/3 = 4。

我的第一个猜测是我没有从索引中选择正确的值,所以我单独打印它们:

print(original_list[-1:], original_list[:2])

# Print:
# [9] [1, 2]

这符合预期,那么我之前的打印有什么问题吗?我该怎么办?

我尝试的是既分开又加入它们:

print(sum(original_list[-1:] + original_list[:2]) / 3)

# Print:
# 4

这是正确的值,但是如果我将样本增加到 5,然后我尝试:

import math
original_list = [*range(1,10)]

def MA(index):
    to_be_averaged = original_list[-2 + index:] + original_list[:3 + index]
    print(to_be_averaged)
    print(sum(to_be_averaged) / len(to_be_averaged))

MA(0)
# Print
# [8, 9, 1, 2, 3]
# 4.6

MA(1)
# Print
# [9, 1, 2, 3, 4]
# 3.8

MA(2)
# Print
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5]
# 4.285714285714286

索引 2 真是一团糟,发生了什么事?我该怎么做呢?我觉得如果指数是正数或负数,这应该是一种独立获得从 a 到 b 范围的简单方法。

python list moving-average indices
1个回答
0
投票

你是正确的,如果开始为负数,你想从原始列表中取出 2 个切片,但开始索引为正数,它从开头开始计算元素,这意味着

list[a:]
会从
a
到末尾获取元素。

只需说出两个条件即可。

original_list = [*range(1,10)]

start_index = -1
end_index = 2

if start_index < 0:
    required_list = original_list[start_index:] + original_list[:end_index]
else:
    required_list = original_list[start_index:end_index]

print(required_list)
© www.soinside.com 2019 - 2024. All rights reserved.