我有一个文本文件,有4623行,条目的形式是0和1的字符串(例如01010111)。我在一个字一个字地比较他们。我有几个字符串长度为1001000和10000的数据集。1000需要25小时,10000需要60小时来计算。有没有办法加快速度?我尝试使用多处理库,但它只是复制值。也许我用错了。代码:
f = open("/path/to/file/file.txt", 'r')
l = [s.strip('\n') for s in f]
f.close()
for a in range(0, len(l)):
for b in range(0, len(l)):
if (a < b):
result = 0
if (a == b):
result = 1
else:
counter = 0
for i in range(len(l[a])):
if (int(l[a][i]) == int(l[b][i]) == 1):
counter += 1
result = counter / 10000
print((a + 1), (b + 1), result)
我是python新手,所以我认为这段代码需要一些优化。任何帮助都是好的。提前谢谢。你知道吗
基础知识
两个字符串都是1的情况下,你的计数方式非常慢。下面是一个简单的例子:
将其与仅将1和0的字符串表示为位的字符串进行比较:
这比以前快了2045倍。所以问题不是如何加速python,而是“我应该使用什么样的数据结构?”。你知道吗
规模更大
使用bitarray和一个包含10000行1001和0的文件,这不是最坏的情况,但是:
或者使用产品,如示例代码中所示:
注意:
我跳过了您的结果处理,因为您尚未打开它,而且它包含死代码:
永远不会是
True
,因为在前面如果您选中a < b
。我认为你有缩进或逻辑错误,意思是:“真实”数据
最坏的情况,如果我理解正确的话:
注意,我作弊并跳过了切片
b
。移动所有的内存是非常昂贵的,切片可以创建新的拷贝:因此,如果您事先知道了最大位宽度,或者甚至根据数据计算出最大位宽度,我认为用零填充较短的位数组,然后进行整个“计数1”是有益的:
这里teststrs.txt文件由4623个1'和0'的混合长度(随机选择100、1000或10000)串组成
相关问题 更多 >
编程相关推荐