如何在Python中声明数组?
当前回答
# This creates a list of 5000 zeros
a = [0] * 5000
您可以像使用数组一样,使用[n]符号读取和写入此列表中的任何元素。
它似乎具有与数组相同的随机访问性能。我不能说它如何分配内存,因为它还支持不同类型的混合,包括字符串和对象,如果你需要的话。
其他回答
计算时,使用numpy数组:
import numpy as np
a = np.ones((3,2)) # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3]) # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100) # an array with 100 points beteen (and including) 2 and 3
print(a*1.5) # all elements of a times 1.5
print(a.T+b) # b added to the transpose of a
这些numpy数组可以从磁盘保存和加载(甚至压缩),具有大量元素的复杂计算像c一样快。
多用于科学环境。更多信息请看这里。
这样如何……
>>> a = range(12)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> a[7]
6
variable = []
现在变量指向一个空列表*。
当然,这是赋值,不是声明。因为Python是动态类型的,所以在Python中没有办法说“这个变量永远不应该指列表以外的任何东西”。
*默认的内置Python类型称为列表,而不是数组。它是一个任意长度的有序容器,可以容纳异构的对象集合(它们的类型无关紧要,可以自由混合)。这不应该与array模块混淆,后者提供了一种更接近C数组类型的类型;内容必须是同质的(都是同一类型),但是长度仍然是动态的。
是这样的:
my_array = [1, 'rebecca', 'allard', 15]
在Python中,这是一个非常复杂的主题。
实际回答
数组由类列表表示(请参阅参考,不要将它们与生成器混合)。
看看用法示例:
# empty array
arr = []
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0] # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)
理论的答案
实际上,Python的列表是一个实际数组的包装器,其中包含对项的引用。此外,创建底层数组时还使用了一些额外的空间。
这样做的后果是:
随机访问非常便宜(arr[6653]与arr[0]相同) 附加操作是“免费的”,而一些额外的空间 插入操作是昂贵的
看看这个令人敬畏的操作复杂度表。
另外,请看看这张图,在这里我试图展示数组,引用数组和链表之间最重要的区别: