我有一个二维的文件名和文件大小列表,我试图找到第二列中所有元素的平均值,搜索大约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]]]
我尝试了多种可能的解决方案但无济于事。
答案 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))