正在查看的列表示例(列表将始终排序)。列表的大小为 4^12。 [1,1,1,1, ...... , 1,1,4]
目前我有一个 for 循环,它使用一个计数器遍历列表,直到找到第一个非 1,然后中断并返回计数器。这比使用计数函数更快,因为列表已经排序。我现在正在实现二进制搜索,我想知道是否有人能想出一种更好的方法来计算有序列表中领先的数量。
最佳答案
Bisect内置并且看起来比二进制排序快;
import bisect
import time
import itertools
test = [1] * 100000000
test[len(test) - 1] = 4
start = time.time()
print(bisect.bisect_right(test,1))
print(time.time() - start)
start = time.time()
runs = [len(list(b)) for a, b in itertools.groupby(test)][0]
print(runs)
print(time.time() - start)
start = time.time()
length= len(test)-test[::-1].index(1)
print(length)
print(time.time() - start)
# Bisect
99999999
3.719329833984375e-05
# GroupBy
99999999
1.2406058311462402
# Length
99999999
0.3920767307281494
关于python - 计算列表中重复前导整数数量的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48586305/