首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bisect.bisect_right()比我的快3~4倍

bisect.bisect_right()比我的快3~4倍
EN

Stack Overflow用户
提问于 2021-06-01 04:29:32
回答 1查看 44关注 0票数 0

我编写了我的bisect_right()。它比bisect.bisect_right()慢3倍。

代码语言:javascript
复制
def my_bisect_right(a, num):
  ok = len(a)
  ng = -1
  while abs(ok - ng) > 1:
    mid = (ok + ng) // 2
    if a[mid] <= num:
      ng = mid
    else:
      ok = mid
  return ok 

我创建了一个包含10M个整数的列表,并对其运行bisect_right()。bisect.bisect_right()花费了24.82秒,而my_bisect_right()花费了76.30秒。请让我知道我做错了什么。

EN

回答 1

Stack Overflow用户

发布于 2021-06-01 05:00:16

假设您使用的是CPython,并且_bisect可用,最大的区别在于bisect.bisect_right()是用C实现的。请参阅these lines in bisect.py

代码语言:javascript
复制
# Overwrite above definitions with a fast C implementation
try:
    from _bisect import *
except ImportError:
    pass

作为参考,你可以通过它的repr很容易地检查一个函数是用Python还是C实现的:

代码语言:javascript
复制
>>> import bisect
>>> bisect.bisect_right  # C
<built-in function bisect_right>
>>> import functools
>>> functools.wraps  # Python
<function wraps at 0x000001DDAB175F70>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67779888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档