<p>[为清晰起见编辑]</p>
<p>从文本文件中读取项时,它们将作为字符串而不是数字导入。这意味着,如果文本文件中有数字<code>3</code>,并将其读入Python,则需要在进行算术运算之前将字符串转换为数字。在</p>
<p>现在,您有一个包含colums的文本文件。每列都有一个标题和一组项。每一项要么是一个数字,要么不是。如果它是一个数字,它将被函数<code>float</code>正确地转换,如果它不是一个有效的数字(也就是说,如果转换不存在),转换将引发一个称为<code>ValueError</code>的异常。在</p>
<p>因此,你会循环查看你的列表和项目,因为它已经在多个答案中得到了正确的解释。如果可以转换为浮点,请累积统计信息。如果没有,继续忽略这个条目。在</p>
<p>如果您需要更多关于什么是“duck typing”的信息(一种可以恢复为“最好请求原谅而不是请求许可”)的信息,请检查<a href="http://en.wikipedia.org/wiki/Duck_typing" rel="nofollow noreferrer">Wikipedia link</a>。如果你开始接触Python,你会经常听到这个词。在</p>
<p>我的意思是你对下面的统计数据感兴趣。可以为表中的每一列使用该类的实例。在</p>
<pre><code>class Accumulator(object):
"""
Used to accumulate the arithmetic mean of a stream of
numbers. This implementation does not allow to remove items
already accumulated, but it could easily be modified to do
so. also, other statistics could be accumulated.
"""
def __init__(self):
# upon initialization, the numnber of items currently
# accumulated (_n) and the total sum of the items acumulated
# (_sum) are set to zero because nothing has been accumulated
# yet.
self._n = 0
self._sum = 0.0
def add(self, item):
# the 'add' is used to add an item to this accumulator
try:
# try to convert the item to a float. If you are
# successful, add the float to the current sum and
# increase the number of accumulated items
self._sum += float(item)
self._n += 1
except ValueError:
# if you fail to convert the item to a float, simply
# ignore the exception (pass on it and do nothing)
pass
@property
def mean(self):
# the property 'mean' returns the current mean accumulated in
# the object
if self._n > 0:
# if you have more than zero items accumulated, then return
# their artithmetic average
return self._sum / self._n
else:
# if you have no items accumulated, return None (you could
# also raise an exception)
return None
# using the object:
# Create an instance of the object "Accumulator"
my_accumulator = Accumulator()
print my_accumulator.mean
# prints None because there are no items accumulated
# add one (a number)
my_accumulator.add(1)
print my_accumulator.mean
# prints 1.0
# add two (a string - it will be converted to a float)
my_accumulator.add('2')
print my_accumulator.mean
# prints 1.5
# add a 'NA' (will be ignored because it cannot be converted to float)
my_accumulator.add('NA')
print my_accumulator.mean
# prints 1.5 (notice that it ignored the 'NA')
</code></pre>
<p>干杯。在</p>