zip(xrange(0, 11614321), xrange(0, 11627964))
…吃掉了我的大部分公羊。(>150兆字节!)为什么?
编辑: zip 返回一个列表,而不是iterable。像这样的 返回一个iterable?
zip
更重要的是:我在两个大的文件数据数组上迭代,我正在做迭代(0-end,0-end),(0-end,1-end)等操作。我不想对数组进行切片,因为这会导致内存分配过多。我想我只是在索引上迭代,但这似乎不起作用,如上所述。整个代码:
def subsequence_length(data_a, data_b, loc_a, loc_b): length = 0 for i_a, i_b in zip(xrange(loc_a, len(data_a)), xrange(loc_b, len(data_b))): if data_a[i_a] == data_b[i_b]: length += 1 else: break return length
使用 izip 来自itertools
itertools 模块中,编写自己的迭代器来执行相同的操作是很简单的,至少如果您知道您正处理两个输入迭代器。
itertools
def xzip2(i1, i2): i1, i2 = iter(i1), iter(i2) while True: yield next(i1), next(i2)
itertools.izip 必须像这样实现。
itertools.izip
def xzip(*iters): iters = [iter(i) for i in iters] while True: yield tuple([next(i) for i in iters])
(看着 the documentation ,我明白了,除了他们在用 map 而不是列出理解。)
map