平均非空值

2024-09-27 00:18:54 发布

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

我有以下疑问:

>>> ItemMaster.objects.all()[:3].values_list('rt_rating', 'imdb_rating')
[(None, None), (None, Decimal('6.3')), (Decimal('7.6'), Decimal('7.4'))]

获得上述非空值的平均值的最佳方法是什么?对于上述情况,它将是(6.3 + 7.6 + 7.4) / 3。你知道吗


Tags: 方法noneobjectsalllist平均值imdbdecimal
3条回答

您可以使用列表筛选结果,然后使用sumlen计算平均值:

>>> li=[(None, None), (None, Decimal('6.3')), (Decimal('7.6'), 
>>> nums=[j for tup in li for j in tup if j]
>>> av=sum(nums)/len(nums)

您可以使用filterchainstatistics.meanpython3中完成这一切:

from decimal import Decimal
from statistics import mean
from itertools import chain

l = [(None, None), (None, Decimal('6.3')), (Decimal('7.6'), Decimal('7.4'))]

print(mean(filter(None.__ne__,chain.from_iterable(l))))
7.1

None.__ne__意味着你保留了Decimal('0'),这可能是你想要的,也可能不是你想要的。你知道吗

您可以使用itertools.chain获取所有非空项,然后filter移除空项

from itertools import chain

items = filter(None, list(chain(*ItemMaster.objects.all()[:3].values_list('rt_rating', 'imdb_rating'))))
==> [Decimal('6.3'), Decimal('7.6'), Decimal('7.4')]
sum(items)/len(items)
==> Decimal('7.1')

相关问题 更多 >

    热门问题