Python3.x更改' '变成整数/浮点数。从列表中计算平均值

时间:2016-02-19 20:38:24

标签: python python-3.x python-3.4 python-3.5

我正在尝试更改''在列表中为整数或浮点数。让我们说我有一个清单

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

我想将空字符串更改为浮点数或整数。我不确定该部分,但很确定它们必须在最后浮动,因为我要计算平均值。为此,我有另一个名为

的列表
    averages = []

列表" allprices"是基本上由子列表形成的元素列表的列表。它有6个级别。我试图取代'' 0,它工作。但无法找到如何通过命令进行更改的方法。我在这里或其他论坛中找到了一些示例和命令,但对我来说并不起作用。我尝试的第一件事是

    var = ''
    var1= 0
    var = var1

但这会产生一些错误。我也试过直接把它变成浮子,但也没有用。请帮助或指导我另一个标题,以便我能弄明白。顺便说一下,我是编程的新手,所以我尝试做的事情可能看起来不是一个解决这个问题的方便方法,但只要对我有用,我就很高兴。

2 个答案:

答案 0 :(得分:5)

在计算平均值时,只需忽略总和:

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

注意 - 这取决于''的“不真实性”。如果您有列表元素,否则它们是“真实的”(例如' ')但应该被过滤,请适当调整您的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]

答案 1 :(得分:2)

另一个filter的解决方案:

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

filter(None, ...)将清除所有伪造的元素,例如空字符串或值0.后者很好,因为它在计算总和时不会产生影响。