簡體   English   中英

在Python列表中找到最小的數字

[英]finding smallest number in list for python

我正在嘗試使用for循環來獲取python中每周和每月的平均值:

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

就是這樣,但這是不正確的。 我可以幫忙嗎

假設您使用的是Python 2.x,則兩個整數的/運算符使用整數除法,即除法的結果四舍五入為下一個整數。 在交互式解釋器中嘗試:

>>> 5/3
1

要獲得正確的浮點除法,可以使用

from __future__ import division

或將其中一個操作數轉換為float

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

您不需要這些循環。 這是一個簡單的示例:

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

如評論中所示:

上面的示例(在Python 2.x中)如果需要“真”除法(例如34.71),則需要將一部分強制轉換為浮點數。

在Python 3.x中單/除法默認為“真”分裂所以上面的片段將是正確的(盡管具有用於不同結果值average1 )。

這里有幾個問題。 首先, for x in lst產生元素lst ,而不是索引。 其次,將元素添加兩次,一次是在更新sum ,一次是在更新avg 只需計算列表之外的avg 第三,用float代替int來防止截斷:

for x in (week1):
    sum = sum + x
avg1 = sum / 7.
list = [....]
avg = sum(list)/float(len(list))

>>> def ave(numbers):
...  return sum(numbers) / len(numbers)
... 
>>> 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)
>>> ave(week1)
34
>>> ave(week1+week2+week3+week4)
34
>>>


正如其他人指出的那樣,如果您想要不被截斷的結果,請使用from __future__ import division

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM