在Python中查找列表中的最小数字

0 投票
5 回答
1198 浏览
提问于 2025-04-16 15:04

我正在尝试在Python中使用一个for循环来计算每周和每月的平均值:

sum = 0
sumA = 0
sumB = 0
sumC = 0
sumD = 0

week1 = (35,38,30,34,27,40,39)
week2 = (35,38,30,34,27,40,39)
week3 = (35,38,30,34,27,40,39)
week4 = (35,38,30,34,27,40,39)

for x in (week1):
    sum = sum + week1[x]
    avg1 = (sum + week1[x]) / 7
for y in (week2):
    sumA = sumA + week2[y]
    avg2 = (sumA + week2[y]) / 7
for z in (week3):
    sumB = sumB + week3[z]
    avg3 = (sumB + week3[z]) / 7
for k in (week4):
    sumC = sumC + week4[k]
    avg4 = (sumC + week4[k]) / 7

sumD = sum + sumA + sumB + sumC
avg = (sum + sumA + sumB + sumC) / 28

就是这样,但这不正确。能帮我一下吗?

5 个回答

3

这里有几个问题。首先,for x in lst 是在遍历 lst 中的元素,而不是它们的位置(索引)。其次,你在计算的时候把元素加了两次,一次是在更新 sum 的时候,另一次是在更新 avg 的时候。其实只需要在列表外面计算 avg 就可以了。第三,除法的时候用 float(浮点数)而不是 int(整数),这样可以避免结果被截断:

for x in (week1):
    sum = sum + x
avg1 = sum / 7.
4

你不需要这些循环。这里有个简单的例子:

>>> week1 = (35,38,30,34,27,40,39)
>>> average1 = sum(week1) / len(week1)
>>> average1
34

正如评论中提到的:

上面的例子(在 Python 2.x 中)如果你想要“真实”的除法(比如 34.71),需要把其中一个部分转换成浮点数。

在 Python 3.x 中,单个的 / 除法默认就是“真实”的除法,所以上面的 代码片段 就是正确的(虽然 average1 的结果值会不同)。

5

假设你在使用 Python 2.x,两个整数相除时,/ 这个符号会进行整数除法,也就是说,结果会向下取整到最近的整数。你可以在交互式解释器中试试看:

>>> 5/3
1

如果你想得到正确的小数除法结果,可以使用

from __future__ import division

或者先把其中一个数字转换成 float 类型。

avg = float(sum + sumA + sumB + sumC) / 28

撰写回答