Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找二维列表中列的平均值_Python - Fatal编程技术网

Python 查找二维列表中列的平均值

Python 查找二维列表中列的平均值,python,Python,有人能帮我找到2D列表中列的平均值吗。我真的不知道怎么找到这个。我知道如何对每行求和,但不知道如何对每列求和。 问题是: 下面的城市有几天的降雨量,可以在文件中找到 city day1 day2 Rhil 15.0 18.0 Moka 12.5 13.5 我需要找出所有地区每天的平均降雨量。 问题的第一部分是阅读文件,在2D列表中填写数据,并计算每个地区的总降雨量。 每个区域总降雨量的计算值。 以下是代码的第一部分: fil = open('rainfall.dat.txt','r') dat

有人能帮我找到2D列表中列的平均值吗。我真的不知道怎么找到这个。我知道如何对每行求和,但不知道如何对每列求和。 问题是: 下面的城市有几天的降雨量,可以在文件中找到

city day1 day2
Rhil 15.0 18.0
Moka 12.5 13.5
我需要找出所有地区每天的平均降雨量。 问题的第一部分是阅读文件,在2D列表中填写数据,并计算每个地区的总降雨量。 每个区域总降雨量的计算值。 以下是代码的第一部分:

fil = open('rainfall.dat.txt','r')
data=[]
for line in fil.readlines():
    details=line.split()
    row=[]
    row.append(details[0])
    row.append(eval(details[1]))
    row.append(eval(details[2]))
    total_rainfall=eval(details[1])+eval(details[2])
    row.append(total_rainfall)
    data.append(row)
我对python有点陌生,如果有人能告诉我如何用最简单的方法找到所有地区每天的平均降雨量,我将不胜感激。
我在网站上搜索了答案,但代码很复杂,解释得不好。

你可以做两件事之一:

一,。 在表示列而不是行的列表中输入数据:

l = [
    [1,2,3,4], # Column 1 - not a row
    [5,6,7,8]] # Colum 2 - not a row
在这种情况下,你知道该怎么做。(对于l中的列:打印(1.0*sum(列))/len(列))

二,。 否则,您可以像使用任何语言一样:

l = [
    [1, 4, 7], # row 1
    [2, 5, 8],
    [3, 6, 9]]

ncols = len(l[0])
nrows = len(l)
# Sum all elements in each column:
results = ncols*[0] # sums per column, afterwards avgs
for col in xrange(ncols):
    for row in xrange(nrows):
        results[col] += l[row][col]
# Then calculate averages:
# * nrows is also number of elements in every col:
nelem = float(nrows)
results = [s/nelem for s in results]
或者更好:

results = ncols*[0] # avgs per column
nelem = float(nrows)
for col in xrange(ncols):
    for row in xrange(nrows):
        results[col] += l[row][col]
    results[col] /= nelem

print results
输出为:

[2.0, 5.0, 8.0]

你为什么要
eval
评估一切?具体点:使用
float
。请具体说明你要问的问题;你知道如何计算平均数吗?你有没有尝试过实现这个逻辑?好的,但是你能帮我吗?平均降雨量将是总降雨量的一半,因为你要计算2天的降雨量。我当然不准备只为你编写代码。根据我上面的评论,回顾并澄清你的问题。我只是问如何找到每个专栏的平均值,正如问题解决一样。我感谢你的回答和建议。将记录,是的,请使用float(),而不是eval()。eval()是危险的。另外,如果只执行以下操作,速度会更快:line=f.readline().split();行=映射(浮动,行[1:])。([1:]删除第一列)如果您在中逐行执行,则速度会更快:lines=f.read().splitlines()。然后您可以立即得到矩阵:l=[map(float,line.split()[1:]),用于line-in-lines]。手动使用append()会降低您的速度并限制正在加载的列数。请格式化您的代码,虽然此代码可能会回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高答案的长期价值。
[numpy.average(float(data[x][y]) for x in range(len(data))]) for y in range(len(data[0]))]