我想通过多行输入来提高算法的速度.蟒蛇求出列表中保守元素的平均值



我需要从列表中找到连续元素的平均值。起初,我得到了一份清单的长度,

然后列出数字,

然后给出了我需要执行的测试数量(有输入的几行(,

然后我得到了几个输入来执行测试(并且需要打印尽可能多的带有结果的行(

测试的每一行都由列表中的起始元素和结束元素组成。

My algorithm:
nu = int(input())              # At first I am given lenght of list
numbers = input().split()      # then list with numbers
num = input()                  # number of rows with inputs
k =[float(i) for i in numbers] # given that numbers in list are of float type
i= 0
while i < int(num):
a,b = input().split()          # start and end element in list
i += 1
print(round(sum(k[int(a):(int(b)+1)])/(-int(a)+int(b)+1),6)) # round up to 6 decimals

但它还不够快。有人告诉我;最好去掉"while",但我不知道怎么做。感谢您的帮助。

Example:
Input:
8 - len(list)
79.02 36.68 79.83 76.00 95.48 48.84 49.95 91.91 - list
10 - number of test
0 0 - a1,b1
0 1
0 2
0 3
0 4
0 5
0 6
0 7
1 7
2 7
Output:
79.020000
57.850000
65.176667
67.882500
73.402000
69.308333
66.542857
69.713750
68.384286
73.668333
i= 0
while i < int(num):
a,b = input().split()          # start and end element in list
i += 1

将while循环替换为for循环。此外,您还可以在print语句中消除多个int调用:

for _ in range(int(num)):
a, b = [int(j) for j in input().split()]

您没有详细说明约束条件,但我猜要求平均值的范围可能相当大。计算sum(k[int(a):(int(b)+1)])可能需要一段时间。

但是,如果预先计算输入列表的部分和,则每个查询都可以在恒定的时间内得到回答(范围内的数字之和是相应部分和的差(。

最新更新