python - 计算列表中重复前导整数数量的最快方法

标签 python

正在查看的列表示例(列表将始终排序)。列表的大小为 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/

相关文章:

python - 如果,if-else和Elif语句

python - 如何将wav文件转换为浮点幅度

python - 基于 flask-potion 的应用程序的 Swagger UI

python - 在Python中,同一事物的不同类型有两个参数更好,还是处理多个类型的一个参数更好?

python - Python 3 中的泊松点过程与 numpy,没有 scipy

python - 我需要为我的 GCSE 计算机科学制作一个简单的文件压缩系统

python - 在 PySpark 中使用字典进行情感分析

python - 在Django中间件修改地址

python - 使用 xml.etree 解析 XML(仅限)

python - 亚马逊广告 API ItemSearch : Get more than 10 pages/100 results?