所以我使用 insort from bisect 将字符串插入到排序列表中。如果我使用内置的,它会更快。**更快我的意思是,平均快两倍(1 毫秒对 2 毫秒在 10,000 字列表上)。我在比我下面的列表更大的列表上运行了 unix cmd:
time script.py < wordList.txt
我认为它与C有关,但我不明白如何或为什么。我想让我的速度一样快,但不使用内置的。
这里直接来自 bisect 源代码:
def insort_left(a, x, lo=0, hi=None):
"""Insert item x in list a, and keep it sorted assuming a is sorted.
If x is already in a, insert it to the left of the leftmost x.
Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""
if lo < 0:
raise ValueError('lo must be non-negative')
if hi is None:
hi = len(a)
while lo < hi:
mid = (lo+hi)//2
if a[mid] < x: lo = mid+1
else: hi = mid
a.insert(lo, x)
这是我认为使它与众不同的部分:
# Overwrite above definitions with a fast C implementation
try:
from _bisect import *
except ImportError:
pass
这是输入列表:
#wordlist = ["hello", "jupiter", "albacore", "shrimp", "axe", "china", "lance", "peter", "sam", "uncle", "jeniffer", "alex", "fer", "joseph"]
一些使其工作的代码:
sorted_list = []
for line in wordlist:
insort_left(sorted_list, line)
print(sorted_list)
所以我关心的是在不使用模块的情况下在 python 中实现基于 C 的排序。我怎样才能做到这一点?