不同 Python 数据类型的搜寻
创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为清涧企业提供专业的网站制作、成都网站设计,清涧网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。语言: 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()
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
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款