gpt4 book ai didi

python匹配具有巨大数据量的字符串的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:42 26 4
gpt4 key购买 nike

我有一个巨大的表数据(或记录数组),其中包含元素:

tbdata[i]['a'], tbdata[i]['b'], tbdata[i]['c']

都是整数,i是0到100万之间的随机数(表的大小)。

我还有一个名为 Name 的列表,其元素都是文件的名称(总共 900 个名称),例如 '/Users/Desktop/Data/spe-3588-55184- 0228.jpg'(已修改),全部包含三个数字。

现在我想从我的 tbdata 中选择那些上面提到的元素都与列表 Name 名称中的三个数字匹配的数据。这是我最初编写的代码:

Data = []
for k in range(0, len(tbdata)):
for i in range(0, len(NameA5)):
if Name[i][43:47] == str(tbdata[k]['a']) and\
Name[i][48:53] == str(tbdata[k]['b']) and\
Name[i][55:58] == str(tbdata[k]['c']):
Data.append(tbdata[k])

Python 运行了一整夜,仍然没有完成,因为要么数据量很大,要么我的算法太慢......我想知道完成这样的任务最快的方法是什么?谢谢!

最佳答案

您可以像这样构建查找树:

a2b2c = {}
for name in NameA5:
a = int(name[43:47])
b = int(name[48:53])
c = int(name[55:58])

if a not in a2b2c2name:
a2b2c2name[a] = {}
if b not in a2b2c2name[a]:
a2b2c2name[a][b] = {}
a2b2c2name[a][b][c] = True

for k in range(len(tbdata)):
a = tbdata[k]['a']
b = tbdata[k]['b']
c = tbdata[k]['c']
if a in a2b2c2name and b in a2b2c2name[a] and c in a2b2c2name[a][b]:
Data.append(tbdata[k])

关于python匹配具有巨大数据量的字符串的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34122302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com