python - 在包含 200 万个项目的列表中搜索项目 - Python

标签 python sql django sqlite search

我有一个由1.9-2 百万个项目组成的字符串列表。

以下代码:

items = [...]
item_in_list = items[-1] in items

需要 0.1 秒

使用 sqlite3 需要 0.7 秒


现在问题是我需要执行此检查 100 万次,我想在几分钟内而不是几天内完成。

更准确地说,我正在尝试将 CSV 文件的内容与数据库中的计算值同步。


有什么想法吗?真的很棒 :)

最佳答案

将两个集合放入 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

如您所见,set 的速度呈指数级增长。性能也应该比字典好。

值得注意的是,我包括了制作布景所需的时间。这种开销也会影响您的性能,但除了一组比另一组小得多之外,您将获得很大的 yield 。

关于python - 在包含 200 万个项目的列表中搜索项目 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453092/

相关文章:

sql - SQLite3中的窗口函数

django - 带有soaplib的Django中的SOAP服务

python - Django 是否使用一个线程处理 WSGI 或 Gunicorn 中的多个请求?

python - 获取 OSError : too many open files when running longish test suite on code that uses multiprocessing

python - 正则表达式在列表中分隔 slug 和 Lastname 的问题

sql - 如何使用 TSQL 获取 SQL Server 中两个表之间关系的基数?

sql - ORACLE 从表组中选择 ID,错误 "not a GROUP BY expression"

linux - Django 服务器找到但 Apache/mod_wsgi 找不到的文件

python - GStreamer;无法播放错误: "Invalid URI\"\"."

Python os.path.dirname 更改目录时返回意外路径