如何在Python中创建整数数组?

Pyt*_*ved 29 python arrays

它不应该那么难.我的意思是在C,

int a[10]; 
Run Code Online (Sandbox Code Playgroud)

是你所需要的全部.如何为随机大小创建全零的数组.我知道NumPy中的零()函数,但必须有一个简单的内置方法,而不是另一个模块.

cat*_*try 27

两种方式:

x = [0] * 10
x = [0 for i in xrange(10)]
Run Code Online (Sandbox Code Playgroud)

编辑:取代range通过xrange避免造成另一个列表.

另外:正如许多其他人已经注意到包括Pi和Ben James,这创建了一个list,而不是Python数组.虽然列表在许多情况下足够且容易,但对于性能关键用途(例如,当在数千个对象中重复时),您可以查看python数组.查找array模块,如本主题中的其他答案中所述.

  • 并将 py3k 中的 `xrange` 替换回 `range` (3认同)
  • 这是一个清单.它可以包含任何类型的对象,而不仅仅是整数.它使用的RAM比整数所需的RAM多得多. (2认同)
  • 乘法列表时要小心 - 它会给你带来可变对象的麻烦.乘法不会克隆项目,而只是为您提供在列表中多次出现的相同对象.试试这个:`a = [[1]]*3; 一个[1] .append(2)`.因此,附加到'a [1]`将真正改变a的所有项并给你`[[1,2],[1,2],[1,2]]`. (2认同)

yu_*_*sha 25

如果您对列表不满意(因为它们可以包含任何内容并占用太多内存),您可以使用高效的整数数组:

import array
array.array('i')
Run Code Online (Sandbox Code Playgroud)

看到这里

如果你需要初始化它,

a = array.array('i',(0 for i in range(0,10)))
Run Code Online (Sandbox Code Playgroud)

  • 它的Python ffs,memset和C级效率都不是问题. (5认同)

Pär*_*der 9

>>> a = [0] * 10
>>> a
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)


pi.*_*pi. 6

使用阵列模块.有了它,您可以有效地存储相同类型的集合.

>>> import array
>>> import itertools
>>> a = array_of_signed_ints = array.array("i", itertools.repeat(0, 10))
Run Code Online (Sandbox Code Playgroud)

有关更多信息 - 例如不同类型,请查看阵列模块的文档.对于多达100万个条目,这应该感觉非常活泼.对于1000万个条目,我的本地机器认为1.5秒.

array.array的第二个参数是一个生成器,它在读取时构造定义的序列.这样,阵列模块可以逐个消耗零,但生成器只使用常量内存.如果序列变长,这个生成器不会变大(内存方面).阵列当然会增长,但这应该是显而易见的.

你就像列表一样使用它:

>>> a.append(1)
>>> a.extend([1, 2, 3])
>>> a[-4:]
array('i', [1, 1, 2, 3])
>>> len(a)
14
Run Code Online (Sandbox Code Playgroud)

...或者只是将其转换为列表:

>>> l = list(a)
>>> len(l)
14
Run Code Online (Sandbox Code Playgroud)

出奇

>>> a = [0] * 10000000
Run Code Online (Sandbox Code Playgroud)

在构造上比阵列方法更快.去搞清楚!:)