【问题标题】:Pop from empty list [duplicate]从空列表中弹出[重复]
【发布时间】:2016-05-16 07:11:16
【问题描述】:

我想计算“流行”的时间。 这是代码。

x=list(range(10000))
popz=timeit.Timer("x.pop(0)","from __main__ import x")
print (popz.timeit())
IndexError: pop from empty list

如何从列表的开头获取弹出时间。

【问题讨论】:

    标签: python timer timeit


    【解决方案1】:

    默认情况下,timeit method 运行一百万次。但是,您的列表只有 10000 项长。因此,当timeit 运行时,第一个10000 次将愉快地弹出,但10001 迭代将失败。您可以明确设置次数:

    popz.timeit(n=10000)
    

    但是...这是一个非常棘手的计时情况,因为您想计时到.pop 需要多长时间,但是您的列表大小在不断变化。如果您正在寻找渐近性能,您可能可以验证 .pop(0) 具有 O(N) 的渐近性能。然而,具体时间将很难得到,因为您要么必须计算创建列表所需的时间以及 .pop 要么 您的列表在不断变化,而你正在计时。这些都不是理想的......但我想这是尝试对非幂等方法计时的问题......

    【讨论】:

      【解决方案2】:

      这样试试

      >>> import timeit
      >>> x=list(range(10000))
      >>> timeit.timeit("x.pop(0)","from __main__ import x", number=len(x))
      0.01635134604293853
      

      【讨论】:

        【解决方案3】:

        也许您可以尝试在 pop 前后定义的两个变量(日期时间)之间使用不同的值。

        我不确定,但也许是这样) 但是有一个错误,等于第二个变量赋值的时间(“pop”之后)。

        import datetime
        a = datetime.datetime.now()
        # ...wait a while...
        b = datetime.datetime.now()
        print(b-a)
        

        嗯,我不确定在这种情况下时间增量的准确性。

        【讨论】:

        • 谢谢,也许这个案例的准确性取决于很多问题,比如电脑的工作量。我也不确定。
        猜你喜欢
        • 2015-09-21
        • 2013-06-11
        • 2014-04-04
        • 1970-01-01
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多