第二列中列表中元素的平均值

时间:2018-02-01 19:47:52

标签: python python-2.7 list average

我有一个二维的文件名和文件大小列表,我试图找到第二列中所有元素的平均值,搜索大约2小时后找不到任何帮助

这是我的清单:

input: print fileArr

output: [[['david.ppt'], [56437456]], [['terry.dmg'], [54485656]], [['mike.doc'], [6593543]], [['randy.docx'], [5968434]], [['rick.exe'], [4538565]], [['chris.txt'], [2569437]], [['sarah.txt'], [458667]], [['fred.png'], [54966]], [['terry.dat'], [4596]], [['flyer.jpg'], [4305]]]

我尝试了多种可能的解决方案但无济于事。

4 个答案:

答案 0 :(得分:5)

这可能会这样做:

fileArr = [[['david.ppt'], [56437456]], [['terry.dmg'], [54485656]], [['mike.doc'], [6593543]], [['randy.docx'], [5968434]], [['rick.exe'], [4538565]], [['chris.txt'], [2569437]], [['sarah.txt'], [458667]], [['fred.png'], [54966]], [['terry.dat'], [4596]], [['flyer.jpg'], [4305]]]

average = sum(second[0] for first, second in fileArr) // len(fileArr)
print(average)

正如Willem评论的那样,关键的观察结果是,你的每件物品都包含在一个额外的无关列表中。所以第一对不是人们所期望的那样:

['david.ppt', 56437456],

而是一对单元素列表:

[['david.ppt'], [56437456]],

答案 1 :(得分:3)

你可以试试这个:

s = [[['david.ppt'], [56437456]], [['terry.dmg'], [54485656]], [['mike.doc'], [6593543]], [['randy.docx'], [5968434]], [['rick.exe'], [4538565]], [['chris.txt'], [2569437]], [['sarah.txt'], [458667]], [['fred.png'], [54966]], [['terry.dat'], [4596]], [['flyer.jpg'], [4305]]]
vals = [i[-1][0] for i in s]
print(sum(vals)/float(len(vals)))

答案 2 :(得分:1)

首先,在另一个列表中包装值(作为字符串,这已经很奇怪)是相当奇怪的。

声明性方法是使用numpy

from numpy import array

array(fileArr)[:, 1, 0].astype(int).mean()

对于您的样本数据,这将给出:

>>> array(fileArr)[:, 1, 0].astype(int).mean()
13111562.5

Numpy是一种构建多维数组的方法。通过使用array(..),我们将数据加载到numpy数组中。然后我们使用切片[:,1,0]为每一行获取第二个项目,然后为该列表获取第一个元素。接下来,我们使用astype(int)将项目转换为整数,然后我们调用.mean()来计算整数数组的平均值。

答案 3 :(得分:1)

首先,从每个内部列表中获取所有第二个元素:

all_sizes = [x for _, x in fileArr] # we use _ as a variable name for the first element of each inner list.
                                    # _ as a name usually indicates it won't be used

现在,您所要做的就是找到平均值

print sum(all_sizes) / float(len(all_sizes))