给定第一个列表中的数字列表,第一个列表中三的倍数确定第二个列表中的范围,我必须找到该范围内所有数字的平均值以及我得到的最小和最大数字最小值和最大值是对的,但我把平均值弄错了,我错过了什么?
v1 = [2,3,4,6,2]
v2 = [4,6,7,4,9,3,4,5,5,45,5,4]
vm3 = []
for i in v1:
if i % 3 == 0:
vm3.append(i)
mayl = []
menl = []
proml = []
for i in vm3:
may = v2[i-1]
men = v2[i-1]
prom = 0
for j in range(i):
prom = prom + v2[j]
if v2[j] > may:
may = v2[j]
elif v2[j] < men:
men = v2[j]
mayl.append(may)
menl.append(men)
proml.append(prom/i+1)
print(mayl)
print(menl)
print(proml)
我得到输出:
[7, 9]
[4, 3]
[6.666666666666667, 6.5]
但是这是错误的,因为 4+6+7+4 = 21/4 = 5.25 而不是 6.6 错误在哪里?
两个问题:
4+6+7+4
求和,i
是 3
,因此您只得到前 三个 元素,4
、6
和 7
。proml.append(prom/i+1)
无法正确计算平均值。如果您打算在 i == 3
时数四项,那么您的优先顺序是错误的。 /
比+
结合得更紧密,所以当你需要(prom/i)+1
时,你正在计算proml.append(prom/(i+1))
(在这种情况下,你的内部循环应该是for j in range(i+1):
,而不是range(i)
,以实际读取所有值直到并包括索引 3
)。如果您只想计算三个项目,那么 proml.append(prom/i)
是正确的,添加 1
会将其视为对四个值求和。