如何在 Python 中声明数组?

2025-03-05 09:17:00
admin
原创
61
摘要:问题描述:如何在Python中声明数组?解决方案 1:variable = [] 现在variable指的是一个空列表*。当然,这是赋值,而不是声明。在 Python 中没有办法说“这个变量永远不应该引用列表以外的任何东西”,因为 Python 是动态类型的。默认的内置 Python 类型称为列表*,而不是数...

问题描述:

如何在Python中声明数组?


解决方案 1:

variable = []

现在variable指的是一个空列表*。

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


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

解决方案 2:

这是 Python 中一个令人惊讶的复杂主题。

实用答案

数组由类表示list(请参阅参考,不要将它们与生成器混合)。

查看使用示例:

# 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)

理论答案

底层 Pythonlist是包含项目引用的真实数组的包装器。此外,底层数组会创建一些额外的空间。

其后果是:

  • 随机访问确实很便宜(arr[6653]相同arr[0]

  • append操作是“免费的”,同时一些额外的空间

  • insert手术费用昂贵

检查这个令人惊奇的操作复杂性表。

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

解决方案 3:

你实际上并没有声明任何事物,但这是在 Python 中创建数组的方法:

from array import array
intarray = array('i')

有关更多信息,请参阅数组模块:http://docs.python.org/library/array.html

现在可能你不想要一个数组,而是想要一个列表,但其他人已经回答了这个问题。:)

解决方案 4:

我认为你想要一个前 30 个单元格已经填满的列表。所以

   f = []

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

斐波那契数列就是一个可以应用此方法的例子。请参阅欧拉计划中的第 2 个问题

解决方案 5:

以下是具体方法:

my_array = [1, 'rebecca', 'allard', 15]

解决方案 6:

对于计算,使用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 类似。

在科学环境中使用广泛。更多信息请参见此处。

解决方案 7:

JohnMachin 的评论应该是真正的答案。我认为所有其他答案都只是变通方法!所以:

array=[0]*element_count

解决方案 8:

一些贡献者认为 Python 中的数组由列表表示。这是不正确的。Pythonarray()在标准库模块arrayarray.array()”中有一个独立的实现,因此混淆这两者是错误的。列表就是 Python 中的列表,因此在使用命名法时要小心。

list_01 = [4, 6.2, 7-2j, 'flo', 'cro']

list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']

list 和 之间有一个非常重要的区别array.array()。虽然这两个对象都是有序序列,但 array.array() 是有序的同质序列,而 list 是非同质序列。

解决方案 9:

你不用在 Python 中声明任何东西。你只需使用它。我建议你从http://diveintopython.net之类的地方开始。

解决方案 10:

我通常只会这样做,a = [1,2,3]list看看arrays这个正式定义

解决方案 11:

为了补充 Lennart 的答案,可以像这样创建一个数组:

from array import array
float_array = array("f",values)

其中可以采用元组、列表或 np.array 的形式,但不能是数组:

values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable

输出仍然相同:

print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))

# array('f', [1.0, 2.0, 3.0])
# 2.0
# True

列表的大多数方法也适用于数组,常见的有 pop()、extend() 和 append()。

从回答和评论来看,数组数据结构似乎并不那么流行。不过我喜欢它,就像人们更喜欢元组而不是列表一样。

数组结构比列表或 np.array 具有更严格的规则,这可以减少错误并使调试更容易,尤其是在处理数值数据时。

尝试将浮点数插入或附加到 int 数组将引发 TypeError:

values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])

# TypeError: integer argument expected, got float

因此,以数组形式保留本应为整数的值(例如索引列表)可以避免出现“TypeError:列表索引必须是整数,而不是浮点数”,因为数组可以进行迭代,类似于 np.array 和列表​​:

int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
    sample.append(data[i])

令人恼火的是,将一个 int 附加到浮点数组将导致 int 变成浮点数,而不会引发异常。

np.array 也为其条目保留相同的数据类型,但它不会给出错误,而是会改变其数据类型以适应新条目(通常为 double 或 str):

import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
    print(type(i))
    # <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
    sample.append(data[i])
    # no problem here, but TypeError for the other two

在赋值过程中也是如此。如果指定了数据类型,np.array 将尽可能将条目转换为该数据类型:

int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>

或者,本质上:

data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True

而数组只会给出:

invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float

因此,对于特定类型的命令,使用 np.array 不是一个好主意。数组结构在这里很有用。列表保留了值的数据类型。

我发现有些麻烦:数据类型在 array() 中指定为第一个参数,但(通常)在 np.array() 中指定为第二个参数。:|

与 C 的关系此处有提及:
Python 列表与数组 - 何时使用?

探索愉快!

注意:数组的类型化和相当严格的性质更倾向于 C 而不是 Python,并且 Python 在其函数中设计为没有太多类型特定的约束。它的不受欢迎也在协作工作中产生了积极的反馈,而替换它大多涉及额外的 [int(x) for x in file]。因此,忽略数组的存在是完全可行和合理的。它不应该以任何方式妨碍我们大多数人。:D

解决方案 12:

这个怎么样...

>>> a = range(12)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> a[7]
6

解决方案 13:

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

解决方案 14:

Python 将它们称为列表。你可以使用方括号和逗号编写列表文字:

>>> [6,28,496,8128]
[6, 28, 496, 8128]

解决方案 15:

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

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

解决方案 16:

您可以创建列表并将其转换为数组,也可以使用 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)

解决方案 17:

# This creates a list of 5000 zeros
a = [0] * 5000  

您可以使用 [n] 符号读取和写入此列表中的任何元素,就像处理数组一样。

它似乎具有与数组相同的随机访问性能。我无法说出它如何分配内存,因为如果您需要,它还支持不同类型的混合,包括字符串和对象。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用