【发布时间】:2017-09-18 13:33:09
【问题描述】:
我有两个字符串作为文件范围的缓冲区。我想从这个“文件”中读取,以便从第一个字符串中读取字节,而不是第二个字符串,那里有重叠。
在下面的示例中,r1 和 r2 分别表示文件的范围,由字符串以及开始和结束偏移量组成。我已经对示例进行了格式化,以便更清楚地了解文件中字符串的存在位置。
def prioritized_read(range1, range2, read_start, read_end):
# This is the bit I don't know how to write
r1 = ("ABCDEF", (0,6))
r2 = ( "DEF", (1,4))
assert prioritized_read(r1, r2, 0, 6) == "ABCDEF"
r1 = ("ABC", (0,3))
r2 = ( "DEF", (1,4))
assert prioritized_read(r1, r2, 1, 4) == "BCF"
r1 = ( "ABC", (2,5))
r2 = ("DEF", (0,3))
assert prioritized_read(r1, r2, 0, 4) == "DEAB"
r1 = ( "A", (1,2))
r2 = ("DEF", (0,3))
assert prioritized_read(r1, r2, 0, 3) == "DAF"
r1 = ("ABC", (0,3))
r2 = ( "DEF", (3,6))
assert prioritized_read(r1, r2, 3, 6) == "DEF"
read_start 和 read_end 将始终以 r1 和 r2 的端点为界。
这里的示例范围很小,但在我的应用程序中,它们可能大于 10 亿,因此我正在寻找一种时间和内存高效的解决方案。
我考虑将其发布到Programming Puzzles & Code Golf。看起来这应该是一个简单而明显的过程......但它打败了我。
注意我并没有真正从这里读取文件,所以我不能使用涉及 Python 文件对象的解决方案。我只是将文件用作一个方便的类比。
【问题讨论】:
-
那么,您在阅读什么?你有内存中的所有数据吗?您正在阅读网络流吗?这可能会影响答案的性质。
-
所有数据都会在内存中。