【发布时间】:2014-02-19 02:01:57
【问题描述】:
想象一下,我正在读取一个包含如下数字的 csv 文件:
1,6.2,10
5.4,5,11
17,1.5,5
...
而且真的很长。
我将使用这样的 csv 阅读器遍历这个文件:
import csv
reader = csv.reader('numbers.csv')
现在假设我有一些函数可以接受像 max 这样的迭代器:
max((float(rec[0]) for rec in reader))
这会找到第一列的最大值,不需要将整个文件读入内存。
但是,如果我想在 csv 文件的每一列上运行 max,但仍然没有将整个文件读入内存,该怎么办?
如果 max 被这样重写:
def max(iterator):
themax = float('-inf')
for i in iterator:
themax = i if i > themax else themax
yield
yield themax
然后我可以做一些花哨的工作(并且必须)来实现这一点。
但是如果我限制问题并且不允许重写 max 呢?这可能吗?
谢谢!
【问题讨论】: