python list查询及所需时间

本文介绍了一个使用Python实现的列表查询函数,并通过装饰器的方式记录了查询所需的时间成本。该函数适用于已排序的列表,通过逐步缩小查找范围来提高查找效率。

# -*-coding=utf-8 -*-

#filename: list_query

#date: 2018-03-25

#author: guosw

import time

def cost_time(fun):

    def cost(*args,**kwargs):

        stime = time.time()

        x = fun(*args,**kwargs)

        etime = time.time()

        print "function name:",fun.__name__

        print "time cost:",etime-stime

        return x

    return cost

@cost_time

def list_query(_list,_val):

    low = 0

    height = len(i) - 1

    mid = (height - low) // 2

    for n in xrange(height+1):

        if _list[n] == _val:

            return n

    for n in xrange(mid,height+1):

        if _list[n] == _val:

            return n

if __name__ == "__main__":

    i = xrange(100000)

    subscript = list_query(i,9999)

    print subscript

### Python 中 `list.count` 方法的时间复杂度分析 在 Python 的列表(`list`)数据结构中,`count()` 是一种用于统计指定元素在列表中出现次数的方法。对于一个包含 \( n \) 个元素的列表,调用 `count()` 方法会逐一检查每个元素是否等于目标值,并累计计数。 #### 时间复杂度分析 由于 `count()` 方法需要遍历整个列表来完成其功能,因此它的时间复杂度为线性级别,即 **O(n)**[^3]。这意味着随着列表长度的增长,执行时间也会按比例增加。需要注意的是,在最坏情况下(例如目标值不存在于列表中),仍需扫描完整个列表才能确认结果。 另外值得注意的一点是,虽然整体上 `count()` 函数表现为 O(n),但如果对象本身具有复杂的相等性判断逻辑(比如自定义类实例重载了 `__eq__` 方法且其实现较为耗时),那么实际运行效率可能会进一步降低。所以为了保证性能稳定,应确保所处理的对象具备高效的比较机制[^3]。 以下是简单的代码示例展示如何使用以及验证这个结论: ```python import timeit def test_count_performance(size): data = [0]*size + [1]*(int(size/10)) # 构造测试数据集 target_value = 1 start_time = timeit.default_timer() result = data.count(target_value) elapsed_time = (timeit.default_timer() - start_time)*1e6 print(f"For size={size}, counting {target_value} took {elapsed_time:.2f} microseconds.") sizes_to_test = [10**i for i in range(1,7)] for s in sizes_to_test: test_count_performance(s) ``` 此脚本通过不同规模的数据量多次测量 `count()` 执行所需时间,从而间接反映其随输入增长的趋势接近线性关系。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gswcfl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值