我如何计算数字列表中的平均数

时间:2013-12-15 18:10:09

标签: python list sum

除了最后几行之外,一切都正常,我得到了一个类型错误。不确定哪种数据类型需要更改。有任何想法吗?该程序只需滚动两个骰子并计算100个卷中的平均数。

#two dice roll with average of rolls
import random

total=[]

def roll():
    for i in range(100):
        roll_d=random.randint(1,6), random.randint(1,6) 
        total.append(roll_d)
        print(roll_d)

def main():

    roll()

    s=sum(total)
    average=s/100.0
    print(average)

main()

4 个答案:

答案 0 :(得分:1)

total中的每个元素都是两个整数的元组

您必须定义如何将这些元组求和。也许您想单独添加卷:

def roll():
    for i in range(100):
        roll_d=random.randint(1,6), random.randint(1,6) 
        total.extend(roll_d)
        print(roll_d)

此处total.extend()将两个单独传递到total列表。或者您可能需要存储卷的总和

def roll():
    for i in range(100):
        roll_d=random.randint(1,6), random.randint(1,6) 
        total.append(roll_d[0] + roll_d[1])
        print(roll_d)

如果您确实希望保持成对存储卷,则需要调整sum()来调整各个卷号的总和:

s = sum(r for pair in total for r in pair)

答案 1 :(得分:1)

作为建议,使用numpy数组而不是列表:

import numpy as np
total = np.random.randint( low=1, high=6+1, size=(100,2) ) # 100 by 2 array

total.mean( )        # average of all values   ( 1 number)
total.mean( axis=0 ) # average of each column  ( 2 numbers)
total.mean( axis=1 ) # average of each row     ( 100 numbers)

答案 2 :(得分:1)

有很多方法:

print reduce(lambda x, y: x + y, total)/(len(total)*1.0)

sum(total)/(len(total)*1.0)

1.0是为了确保你得到一个浮点除法

或使用numpy:

import numpy as np
print np.mean(total)

答案 3 :(得分:0)

正如马丁所指出的,总数的元素是元组 - 每个骰子卷(前 - (3,4)(1,1)等)

所以,如果我理解你的意图,你也需要将它们加在一起。你不能直接在元组上求和。

以下内容将在找到总和之前将每个卷添加到一起:

s = sum(map(lambda x: x[0]+x[1], total))

请不要硬编码100.0。使用类似s*1.0/len(total)

的内容