[英]Save memory in Python. How to iterate over the lines and save them efficiently with a 2million line file?
[英]Search for item in list with 2MILLION items - Python
我有一个由1.9-2百万项组成的字符串列表。
以下代码:
items = [...]
item_in_list = items[-1] in items
需要0.1秒
使用sqlite3需要0.7秒
现在问题是我需要进行100万次这种检查 ,我想在几分钟而不是几天内完成。
更准确地说,我正在尝试将CSV文件的内容与DB中的计算值同步。
有任何想法吗? 会真的很棒:)
将两个集合放入frozensets。
小小的性能测试:
import random
from timeit import Timer
def random_strings(size):
alpha = 'abcdefghijklmnopqrstuvwxyz'
min = 3
max = 8
strings = []
for count in xrange(1, size):
current = ''
for x in random.sample(alpha, random.randint(min,max)):
current += x
strings.append(current)
return strings
string_list_1 = random_strings(10000)
string_list_2 = random_strings(10000)
def string_test():
common = filter(lambda x: x in string_list_2, string_list_1)
return common
def set_test():
string_set_1 = frozenset(string_list_1)
string_set_2 = frozenset(string_list_2)
common = string_set_1 & string_set_2
return common
string_timer = Timer("__main__.string_test()", "import __main__")
set_timer = Timer("__main__.set_test()", "import __main__")
print string_timer.timeit(10)
# 22.6108954005
print set_timer.timeit(10)
# 0.0226439453
如您所见,设置指数更快。 也应该比字典表现更好。
值得注意的是,我包括制作套装所需的时间。 这种开销也会影响你的性能,但除了一组比另一组小得多之外,你将获得很大的收益。
对于像这样的搜索,我会使用二分搜索。 长SORTED列表的禁食方法之一。 如果未排序,则不要使用二进制搜索。
你需要两百万个字符串来匹配一百万个其他字符串‽
有几件事要尝试:
更新:
正如评论中提到的,集合和dicts不使用二叉树,它们使用哈希表。 这应该比列表更快,实际上甚至可能比二进制搜索更快。
脱离我的头脑,几乎没有关于你为什么这样做几百万次的信息:
1.)你可以将csv导入表中并在sql中进行检查吗?
2.)如何对列表进行排序和索引以便快速访问?
欢呼声,P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.