如何在Python中声明数组?


当前回答

variable = []

现在变量指向一个空列表*。

当然,这是赋值,不是声明。因为Python是动态类型的,所以在Python中没有办法说“这个变量永远不应该指列表以外的任何东西”。


*默认的内置Python类型称为列表,而不是数组。它是一个任意长度的有序容器,可以容纳异构的对象集合(它们的类型无关紧要,可以自由混合)。这不应该与array模块混淆,后者提供了一种更接近C数组类型的类型;内容必须是同质的(都是同一类型),但是长度仍然是动态的。

其他回答

继Lennart之后,还有实现同构多维数组的numpy。

您可以创建列表并将其转换为数组,或者您可以使用numpy模块创建数组。下面是几个例子来说明这一点。Numpy还使使用多维数组变得更容易。

import numpy as np
a = np.array([1, 2, 3, 4])

#For custom inputs
a = np.array([int(x) for x in input().split()])

您还可以使用使用输入作为矩阵维数的重塑函数将该数组重塑为2X2矩阵。

mat = a.reshape(2, 2)

在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]相同) 附加操作是“免费的”,而一些额外的空间 插入操作是昂贵的

看看这个令人敬畏的操作复杂度表。

另外,请看看这张图,在这里我试图展示数组,引用数组和链表之间最重要的区别:

我有一个字符串数组,需要一个具有相同长度的布尔值的数组,初始化为True。这就是我所做的

strs = ["Hi","Bye"] 
bools = [ True for s in strs ]

我认为你(意思是)想要一个列表与前30个单元格已经填补。 所以

   f = []

   for i in range(30):
       f.append(0)

斐波那契数列就是一个例子。 参见Project Euler中的问题2