Python3.x正在将“”更改为整数/浮点。从lis计算平均值

2024-04-24 22:09:50 发布

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

我正在尝试将列表中的“”更改为整数或浮点。假设我有一张单子

    allprices = ['', '', '', 1.2, 3.2, 1.8, '', '', '', '', '', '']

我想把空字符串改成浮点数或整数,我不确定这部分,但我很确定它们必须是最后的浮点数,因为我要计算平均数。现在我有另一份名单叫

    averages = []

列表“allprices”是基本上由子列表组成的元素列表。它有6个等级。我尝试将“”替换为0,但成功了。但我想不出如何用命令来改变。有一些例子和命令,我发现在这里或其他论坛,但没有为我工作。我首先尝试的是

    var = ''
    var1= 0
    var = var1

但这会产生一些错误。我也试着直接把它变成一个浮点数,但也没用。请帮我或指导我到另一个标题,这样我可以找出它。顺便说一句,我是一个新的编程,所以我试图做的可能看起来不是一个方便的方式来解决这个问题,但我很高兴,只要它为我工作。你知道吗


Tags: 字符串命令元素列表var整数例子单子
2条回答

和另一个含有filter的溶液:

>>> sum(filter(None, allprices))/len(allprices)
0.5166666666666667

filter(None, ...)将删除所有错误的元素,例如空字符串或值0。后者很好,因为在计算总和时不会产生影响。你知道吗

在计算平均值时,忽略总和中的它们:

>>> allprices = ['', '', '', 1.2, 3.2, 1.8, '', '', '', '', '', '']
>>> sum(x for x in allprices if x)/len(allprices)
0.5166666666666667

注意-这依赖于''的“非真实性”。如果您的列表元素在其他方面是“truthy”(如' '),但应该进行筛选,请适当调整If子句:

>>> allprices = ['', '', '', 1.2, 3.2, 1.8, '', '', '', '', '', ' ']
>>> sum(x for x in allprices if isinstance(x, (float, int)))/len(allprices)
0.5166666666666667

如果您可能有不是intfloat的数字类,请使用抽象基类Numbers进行筛选:

>>> import numbers
>>> sum(x for x in allprices if isinstance(x, numbers.Number))/len(allprices)
0.5166666666666667

如果要用0替换'',请使用列表理解:

>>> [e if e else 0 for e in allprices]
[0, 0, 0, 1.2, 3.2, 1.8, 0, 0, 0, 0, 0, 0]

或者

>>> [e if isinstance(e, (float, int)) else 0 for e in allprices]
[0, 0, 0, 1.2, 3.2, 1.8, 0, 0, 0, 0, 0, 0]

相关问题 更多 >