我有这个独特的要求,可以用这段代码来解释。这是工作代码,但内存效率不高。
data = [[
"A 5408599",
"B 8126880",
"A 2003529",
],
[
"C 9925336",
"C 3705674",
"A 823678571",
"C 3205170186",
],
[
"C 9772980",
"B 8960327",
"C 4185139021",
"D 1226285245",
"C 2523866271",
"D 2940954504",
"D 5083193",
]]
temp_dict = {
item: index for index, sublist in enumerate(data)
for item in sublist
}
print(data[temp_dict["A 2003529"]])
out: ['A 5408599', 'B 8126880', 'A 2003529']
简而言之,我希望子列表的每个项目都可索引,并应返回子列表。
上面的方法有效,但是当数据很大时会占用大量内存。有没有更好的,内存和CPU友好的方法?数据存储为JSON文件。
编辑 我尝试了最大可能的用例场景的答案(1000个子列表,每个子列表100个项目,100万个查询),这是结果(10次运行的平均值):
Method, Time (seconds), Extra Memory used
my, 0.637 40 Mb
deceze, 0.63 40 Mb
James, 0.78 200 kb
Pant, > 300 0 kb
mcsoini, forever 0 kb
是。我的样品盒 在我的实际情况中,子列表包含100项商品和数千个此类子列表。该代码的用户的内存较小(<2gb),因此在运行其他繁重的应用程序时,他们会抱怨您的脚本运行缓慢。
—
拉胡尔
您到底想解决什么问题?也许可以使用一种混合方法,在该方法中,您可以按第一个字母索引,然后遍历几个候选列表以找到您的确切值,就像哈希表冲突解决算法一样。
—
deceze
对于有效的方式,请使用诸如yield()之类的生成器。
—
Saisiva A
谢谢。我将学习“哈希表冲突解决”的含义。
—
拉胡尔
{item: sublist for sublist in data for item in sublist}可能会更有效,更直接...?!