【问题标题】:Binary array in pythonpython中的二进制数组
【发布时间】:2009-04-15 10:21:22
【问题描述】:

如何在 python 中创建大数组,创建它的效率如何

在 C/C++ 中:

byte *data = (byte*)memalloc(10000);

byte *data = new byte[10000];

在python中...?

【问题讨论】:

    标签: python


    【解决方案1】:

    看看array module

    import array
    array.array('B', [0] * 10000)
    

    您可以传递一个生成器,而不是传递一个列表来初始化它,这样更节省内存。

    【讨论】:

    • 最快的数组初始化是array.array('B', [0]) * 10000。 (即倍增的短数组)见*.com/a/3214343/448474
    【解决方案2】:

    您可以预先分配一个列表:

    l = [0] * 10000
    

    这将比 .appending 稍微快一点(因为它避免了中间重新分配)。但是,这通常会为整数对象的指针列表分配空间,这将大于 C 中的字节数组。

    如果您需要内存效率,您可以使用数组对象。即:

    import array, itertools
    a = array.array('b', itertools.repeat(0, 10000))
    

    请注意,这些在实际使用中可能会稍微慢一些,因为在访问元素时有一个拆箱过程(它们必须首先转换为 python int 对象)。

    【讨论】:

    • 'B' 必须使用(对于 unsigned char)而不是 'b',因为前者是唯一一个 C 保证是所有位都对其值有贡献的类型。
    【解决方案3】:

    您可以使用 array 模块有效地创建大数组,但使用它不会像 C 那样快。如果您打算做一些数学运算,最好使用 numpy.array

    检查this question进行比较。

    【讨论】:

      【解决方案4】:

      通常使用 python,您只需创建一个列表

      mylist = []
      

      并将其用作数组。或者,我认为您可能正在寻找数组模块。见http://docs.python.org/library/array.html

      【讨论】: