不同 Python 数据类型的搜寻
admin
2023-01-21 07:01:01
0

不同 Python 数据类型的搜寻

语言: Python 3.7.2

系统: Win10 Ver. 10.0.17763

主题: 004.01 不同 Python 数据类型的搜寻
最近在做资料搜索比对的案子的时候,发现大量的数据在搜索比对时,速度变的非常慢,慢到完全无法接受,我想要的是 ' 立即 ' 有结果,结果却是要等好几小时,晕!虽然以 Python 来说,肯定比不上 C 或 Assembly 语言,但是还是要想办法提升一下速度。以下是在一万笔数据中,找一万笔数据的各种方法以及所需的时间,虽然最后一个方法 index_list_sort(), 速度快了多,但是我还是觉得不够快,而且这里还只是整数的搜索,如果是字符串呢?如果是副字符串呢?各位如果有更好的方法,也请提示,谢谢!

结果:

0:00:04.734338 : index_sequence
0:00:01.139984 : index_list
0:00:00.330116 : index_np
0:00:00.233343 : index_np_sort
0:00:00.223401 : index_dict
0:00:00.213462 : index_set
0:00:00.007977 : index_list_sort

代码:

代码:from datetime import datetime
import numpy as np
import bisect
import time
import random
import inspect
import copy

size        = 10000
value       = size-1
db          = random.sample(range(size), size)
db_sort     = copy.deepcopy(db)
db_sort.sort()
db_set      = set(db)
db_dict     = {db[i]:i for i in range(size)}
db_np       = np.array(db)
value       = [i for i in range(size)]

def call(func):
    # Call function and calculate execution time, then print duration and function name
    start_time = datetime.now()
    func()
    print(datetime.now() - start_time,':',func.__name__)

def do_something():
    # Do something here, it may get duration different when multi-loop method used
    for i in range(1000):
        pass

def index_sequence():
    # List unsort and just by Python without any method used or built-in function.
    for i in range(size):
        for j in range(size):
            if value[j] == db[i]:
                index = j
                do_something()
                break

def index_list():
    # Unsorted list, use list.index()
    for i in range(size):
        try:
            index = db.index(value[i])
        except:
            index = -1
        if index >= 0:
            do_something()
def index_np():
    # By using numpy and np(where)
    for i in range(size):
        result = np.where(db_np==value[i])
        if len(result[0])!=0:
            do_something()

def index_np_sort():
    # By using numpy and sorted numpy array
    for i in range(size):
        result = np.searchsorted(db_np, value[i])
        if result != size:
            do_something()

def index_list_sort():
    # By using bisect library
    for i in range(size):
        index = bisect.bisect_left(db, value[i])
        if index < size-1 and value[index]==db[index]:
            do_something()

def index_set():
    # Set serach
    for i in range(size):
        if value[i] in db_set:
            do_something()

def index_dict():
    # Dictionary search
    for i in range(size):
        try:
            index = db_dict[value[i]]
        except:
            index = -1
        if index >= 0:
            do_something()

Test execution time

call(index_sequence)
call(index_list)
call(index_np)
call(index_np_sort)
call(index_dict)
call(index_set)
call(index_list_sort)复制代码 database search

相关内容

热门资讯

台防务部门呼吁通过所谓无人机条... 7月22日上午,国台办举行例行新闻发布会。记者:据报道,台防务部门负责人近日称,呼吁通过行政部门无人...
英媒:为什么世界更相信中国而不... 当下西方世界深陷信任危机,民众对体制普遍失望愤怒。美国全球公信力持续崩塌,多国对华信任度已反超美国。...
“台青e家”平台上线运行,国台... 7月22日,国务院台办举行例行新闻发布会。有记者问:在海峡两岸青年文化月活动期间,国务院台办主任宋涛...
视频丨从“有学上”到“上好学”... 教育强国,基点在基础教育。我国拥有43万所中小学幼儿园、2.2亿在校生、1577万专任教师,建成了世...
“看到这几张脸生理性厌恶!”你... 近期,“对AI脸感到不适”相关话题接连冲上社交平台热搜。打开短视频平台刷微短剧,连续刷几部后,主角个...
今年上半年全国城镇新增就业69... 今天(22日)上午,人力资源社会保障部举行新闻发布会。今年上半年,全国城镇新增就业695万人,同比持...
委内瑞拉强震遇难人数升至534... 当地时间21日,委内瑞拉全国代表大会主席豪尔赫·罗德里格斯通过社交媒体通报,该国6月24日两次强震造...
高考684分花3000元咨询进... 潮新闻客户端 青年特约评论员 曾耀湘图源:视觉中国近日,据齐鲁晚报报道,河北一名2018级考生,因“...
郑州2死2伤火灾系人为纵火 郑州市公安局金水分局对外发布案件通报。通报显示,6月19日21时,郑州市金水区宏明路与柳林路东南角宏...
29岁成都小伙旅行中改道广西救... 7月14日,自发赶往广西救灾的志愿者党鑫蕊,由于劳累过度导致心功能衰竭,在贵港市覃塘区不幸离世,年仅...