列表的python平均值

2024-09-28 23:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个包含正数和负数的列表中找出所有负数的平均值。我可以找到名单的平均值

import numpy as np

listA = [ [2,3,-7,-4] , [-2,3,4,-5] , [-5,-6,-8,2] , [9,5,13,2]  ]
listofmeans = [np.mean(i) for i in listA ]

我想创建一个类似的单行代码,只取列表中负数的平均值。例如,新列表的第一个元素是(-7+-4)/2=-5.5

我的完整清单是:

listofnegativemeans = [ -5.5, -3.5, -6.333333, 0 ] 

Tags: inimportnumpy列表forasnpmean
3条回答

您可以使用以下选项:

listA = [[2,3,-7,-4], [-2,3,4,-5], [-5,-6,-8,2], [9,5,13,2]]
means = [np.mean([el for el in sublist if el < 0] or 0) for sublist in listA]
print(means)

输出

[-5.5, -3.5, -6.3333, 0.0]

如果sublist中的任何元素都不小于0,则列表理解将计算为[]。通过包含表达式[] or 0,我们可以处理您希望计算空列表的平均值为0的场景。

纯粹的裸体方式:

In [2]: np.ma.masked_greater(listA,0).mean(1).data
Out[2]: array([-5.5       , -3.5       , -6.33333333,  0.        ])

如果您使用的是numpy,那么您应该努力使用numpytonic代码,而不是回到python逻辑。这意味着使用numpy的ndarray数据结构,以及数组的常用索引样式,而不是python循环。

通常情况下:

>>> listA
[[2, 3, -7, -4], [-2, 3, 4, -5], [-5, -6, -8, 2], [9, 5, 13, 2]]
>>> A = np.array(listA)
>>> np.mean(A, axis=1)
array([-1.5 ,  0.  , -4.25,  7.25])

否定的意思是:

>>> [np.mean(row[row<0]) for row in A]
[-5.5, -3.5, -6.333333333333333, nan]

相关问题 更多 >