我有一个以字符格式排列的数字列表(1000 万),每个条目都是 15 个字符的恒定长度。像这样想:
100000000000000
100000000000001
...
100000010000000
现在我想在这个列表中创建一个定期细分,看看条目是如何在不同范围内累积的。输出可能是这样的:
100000000xxxxxx, 523121 entries
100000001xxxxxx, 32231 entries
目前我已经尝试将整个列表读取到一组,并通过它进行搜索。我都试过了,string
格式int
。整数版本比当前字符串版本快3 倍。代码如下所示:
collection_str = set(line.strip() for line in open(inputfile)
collection_int = set(int(line.strip()) for line in open(sys.argv[1]))
def find_str(look_for, ourset):
count = 0
for entry in ourset:
if entry.startswith(look_for):
count += 1
return count
def find_int(look_for, ourset):
search_min = int(str(look_for) + "000000")
search_max = int(str(look_for+1) + "000000")
count = 0
for entry in ourset:
if entry >= search_min and entry < search_max:
count += 1
return count
结果如下所示:
"int version"
100000100 27401 (0.515992sec)
100000101 0 (0.511334sec)
100000102 0 (0.510956sec)
100000103 0 (0.510467sec)
100000104 0 (0.512834sec)
100000105 0 (0.511501sec)
"string version"
100000100 27401 (1.794804sec)
100000101 0 (1.794449sec)
100000102 0 (1.802035sec)
100000103 0 (1.797590sec)
100000104 0 (1.793691sec)
100000105 0 (1.796785sec)
我想知道我是否可以以某种方式让它更快?即使使用 0,5s / 范围,如果我想经常运行它以创建一些周期性统计数据,这仍然需要时间......从周围的搜索中我看到有些人使用bisect
类似的东西,但我似乎无法理解它应该如何工作。