如果你想逐行读取文件行,因为你没有那么多的内存,您可以根据需要与国际热核实验堆,如果你的文件是基于线做线性解决方案,否则看这个:
seq 0 3 100 > 3k.txt
seq 0 2 100 > 2k.txt
然后运行以下代码:
i1 = iter(open("3k.txt"))
i2 = iter(open("2k.txt"))
a = int(next(i1))
b = int(next(i2))
aNotB = []
# bNotA = []
while True:
try:
if a < b:
aNotB += [a]
a = int(next(i1, None))
elif a > b:
# bNotA += [a]
b = int(next(i2, None))
elif a == b:
a = int(next(i1, None))
b = int(next(i2, None))
except TypeError:
if not b:
aNotB += list(i1)
break
else:
# bNotA += list(i1)
break
print(aNotB)
输出:
[3、9、15、21、27、33、39、45、51、57、63、69、75、81、87、93、99]如果您同时想要aNotB和bNotA的结果,则可以取消注释这两个线。
时间与Andrej Kesely的答案进行比较:
$ seq 0 3 1000000 > 3k.txt
$ seq 0 2 1000000 > 2k.txt
$ time python manual_iter.py
python manual_iter.py 0.38s user 0.00s system 99% cpu 0.387 total
$ time python heapq_groupby.py
python heapq_groupby.py 1.11s user 0.00s system 99% cpu 1.116 total