这是有趣的; list()强制迭代器获取实际列表比[x for x in someList] (理解) [x for x in someList]

这是真的还是我的测试太简单了? 以下是代码:

import time    

timer = time.clock()
for i in xrange(90):

    #localList = [x for x in xrange(1000000)]   #Very slow, took me 6.8s
    localList = list(xrange(1000000))           #Very fast, took me 0.9s

    print localList[999999] #make sure list is really evaluated.

print "Total time: ", time.clock() - timer

#1楼 票数:16 已采纳

列表推导在Python字节码中执行循环,就像常规for循环一样。

list()调用完全在C代码中迭代,这要快得多。

列表推导的字节码如下所示:

>>> import dis
>>> dis.dis(compile("[x for x in xrange(1000000)]", '<stdin>', 'exec'))
  1           0 BUILD_LIST               0
              3 LOAD_NAME                0 (xrange)
              6 LOAD_CONST               0 (1000000)
              9 CALL_FUNCTION            1
             12 GET_ITER            
        >>   13 FOR_ITER                12 (to 28)
             16 STORE_NAME               1 (x)
             19 LOAD_NAME                1 (x)
             22 LIST_APPEND              2
             25 JUMP_ABSOLUTE           13
        >>   28 POP_TOP             
             29 LOAD_CONST               1 (None)
             32 RETURN_VALUE        

>>指针大致为您提供了正在执行的循环的边界,因此您需要在Python字节码评估循环中执行100万个STORE_NAMELOAD_NAMELIST_APPEND步骤。

另一方面, list()只是通过使用C API进行对象迭代直接从xrange()迭代中获取值,并且它可以使用xrange()对象的长度来预先分配列表对象而不是增长它动态。

  ask by Cristiano Coelho translate from so

未解决问题?本站智能推荐:

3回复

如何在python列表中获取对象的选定属性?

如何使用python中对象的选定属性创建列表? 使用列表推导。 例如: 我的对象A有 还有更多属性 如何创建列表[name,age] 我可以手动完成,但看起来很丑: 但我正在寻找捷径。
3回复

为列表中的元素分配更简洁的代码(Python)?

如何以更简洁的“ pythonic”方式执行以下操作:
4回复

比较Python中Gigantic Two Dimen列表中一个列表的值,最快的方法?

我想比较一个列表的值是否存在于另一个列表的值中。它们很大(来自数据库的5万多个项目)。 编辑: 我还想将重复的记录标记为plicate = True,并将其保留在表中以供以后参考。 列表如下: 但是它似乎太长了,而且列表较大(50k vs 50k记录+),它运行了500
2回复

Python列表,查找对象名称,效率建议

假设我有以下对象: 以及包含多个实例的列表,例如: 如果我想找到一个具有给定名称的对象,我可以使用以下内容: 这显然意味着: 但是,是否有更有效的数据结构或方法来检索此类对象? 实际上,对象名称仅在运行时已知,并且理论上可以在对象的整个生命周期中发生变化。
1回复

list .__ delslice__ python 3

有没有一种方法可以执行python 2 list.__delslice__ ? 有一个__delitem__但似乎它只删除一项而不是从x到y,所以这是我要执行的示例 看来他们可能已从python 3中删除了它,对吗? 如果不是,现在叫什么,或者有一个包含它的模块?
3回复

将Python中的字符串拆分为3个段,这些段指定给3个变量,具体取决于项数

我是Python的新手,正在努力以最Pythonic的方式解决以下问题。 我有一个字符串(下面给出的示例状态),需要将其拆分( .split('/', 2) )并指定(最多)3个变量(变量a,b和c)。 该字符串是一个URL,我需要将其分为3个部分。 字符串及其段可以是以下示例:
4回复

从[list]字典python中删除多个值

我试图从大字典中删除所有值'x'并且不删除任何键,但是当我运行代码时仍然存在'x'值。 这是我的词典的摘录: 我的代码到目前为止: 我的目标是: 我应该如何删除列表中的'x'值?
2回复

在python中list1 = [] list2 = []和list1 = list2 = []之间有什么区别?

我刚开始使用python,我正在尝试使用列表推导来初始化两个列表。 像这样 当我这样做并插入这些列表与值时,我得到一组不同的值(不正确的值)与我在单独初始化这些列表时得到的值相比。 喜欢 第一种情况发生了什么? 为什么我会为这两种情况得到不同的答案?