附加&在python中打印一个数字列表

时间:2011-02-23 00:55:43

标签: python list

我正在求解一个数字近似值(2的平方根),精度达到一百万或更多。 由于我认为知识不足,我可以提高效率。但我确实有一些与Python本身有关的问题,可能有助于减少一些开销时间......

  1. 如果我们正在进行一个持续几个小时的计算,那么通过在while循环之外移动一次性条件语句可以减少多少常数因素(IT只会随时使用)?它只是n *常数因子C吗?

  2. 根据一些读数,我被告知list.append(x)成本很高。在while循环中,每次迭代都会在列表中附加一个新的整数(我也必须首先使用str(x)....)。 def method6():

    return''。join([{num for num in xrange(loop_count)])

  3. 参考阅读:Efficient String Concatenation in Python

    我对这种方法很感兴趣。我可以使用它来构建列表,并在我从函数返回时将列表中的每个项目连接成单个字符串(即我需要打印出结果)。我不太确定如何使用这种方法。什么是第一个数字? (请访问该链接,因为stackoverflow删除了第一个数字的引号)

    1. 继续#2,我将整数插入列表

        
          

      打印结果

               

      [1L,'。',4L,1L,4L,2L,1L]

               

      打印结果[0]

               

      1

        
    2. 我不记得那个字母L代表什么.....

      我感谢任何帮助!非常感谢你。

2 个答案:

答案 0 :(得分:4)

(请尽量将问题限制在一个主题上,而不是一次性询问几个不相关的问题。)

如果你想知道一个变化有多大差异,比如从一个循环中移出一些东西,你需要自己对它进行基准测试。搜索timeit

追加到字符串和列表是完全不同的野兽。

字符串是不可变的 - 您不会附加到它们。 a += 'x'不会将'x'附加到a;它创建一个全新的字符串,使其成为O(n)。当附加大量字符串时,这可能是低效的,因为它变为O(n ^ 2)。 (请注意,当没有其他对a的引用时,CPython会优化这种特殊情况,从而消除额外的副本。并非所有Python实现都可以执行此操作。)

列表中不存在此问题:列表是可变的。附加到列表是O(1),因此在循环中追加它们的效率。 (它会定期重新分配列表,为新项目腾出空间,但效率很高。)

如果要生成大量数据以插入列表,通常最好使用生成器函数,但您不必这样做。

在Python 2中,1L声明了一个long而不是int;见http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex

答案 1 :(得分:1)

附加到列表并不昂贵。附加到字符串代价很高。

这是因为Python中的字符串是不可变的,因此每次附加时,都会生成一个全新的字符串。但是,列表是可变的,因此附加到列表只会在最后添加单个项目。

大多数Python实现中列表的后备实现都是数组,因此如果初始化为较小的大小,那么随着时间的推移 的列表需要重新分配几次,但由于大多数实现都倾向于为分配大小使用指数增长因子,问题并不是那么多(如果你想要,你可以通过类似my_list = [None]*1000000之类的预先分配整个长度来避免它,以获得一百万个列表{ {1}} S)。