我正在尝试更改''在列表中为整数或浮点数。让我们说我有一个清单
allprices = ['', '', '', 1.2, 3.2, 1.8, '', '', '', '', '', '']
我想将空字符串更改为浮点数或整数。我不确定该部分,但很确定它们必须在最后浮动,因为我要计算平均值。为此,我有另一个名为
的列表 averages = []
列表" allprices"是基本上由子列表形成的元素列表的列表。它有6个级别。我试图取代'' 0,它工作。但无法找到如何通过命令进行更改的方法。我在这里或其他论坛中找到了一些示例和命令,但对我来说并不起作用。我尝试的第一件事是
var = ''
var1= 0
var = var1
但这会产生一些错误。我也试过直接把它变成浮子,但也没有用。请帮助或指导我另一个标题,以便我能弄明白。顺便说一下,我是编程的新手,所以我尝试做的事情可能看起来不是一个解决这个问题的方便方法,但只要对我有用,我就很高兴。
答案 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
如果您的数字类别不是int
或float
,请使用抽象基类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.后者很好,因为它在计算总和时不会产生影响。