如何在Python中声明一个数组? 您所在的位置:网站首页 python定义符号数组 如何在Python中声明一个数组?

如何在Python中声明一个数组?

2023-09-15 14:45| 来源: 网络整理| 查看: 265

如何在Python中声明数组?

我在文档中找不到任何对数组的引用。

#1楼

这个怎么样...

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

现在variable引用空列表* 。

当然这是一项任务,而非宣言。 在Python中没有办法说“这个变量永远不应该引用除列表之外的任何东西”,因为Python是动态类型的。

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

#3楼

这是如何:

my_array = [1, 'rebecca', 'allard', 15] #4楼

你没有用Python声明任何东西。 你只需要使用它。 我建议你从http://diveintopython.net开始 。

#5楼

我通常会做a = [1,2,3] ,这实际上是一个list但对于arrays看看这个正式的定义

#6楼

你实际上没有声明事情,但这是你在Python中创建数组的方式:

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

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

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

#7楼

继Lennart之后,还有numpy实现了均匀的多维数组。

#8楼

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

>>> [6,28,496,8128] [6, 28, 496, 8128] #9楼

我有一个字符串数组,需要一个与True相同长度的布尔值的数组。 这就是我做的

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

这是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) 理论答案

在引擎盖下,Python的list是包含对项的引用的真实数组的包装器。 此外,底层数组创建了一些额外的空间。

其后果是:

随机访问真的很便宜( arr[6653]与arr[0]相同) append操作是“免费”,而一些额外的空间 insert操作很昂贵

检查这个令人敬畏的操作复杂性表 。

另外,请看这张图片,我试图显示数组,引用数组和链表之间最重要的区别: 数组,到处都是数组

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

从答案和评论来看,似乎阵列数据结构并不那么受欢迎。 我喜欢它,就像人们可能更喜欢列表中的元组一样。

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

尝试将float插入/附加到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:list indices必须是整数,而不是float”,因为数组可以迭代,类似于np.array和lists:

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

令人讨厌的是,将一个int附加到float数组将导致int变为float,而不会引发异常。

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)) # numpy_int_array_2 = np.append(numpy_int_array,int(1)) # still numpy_float_array = np.append(numpy_int_array,float(1)) # for all values numpy_str_array = np.append(numpy_int_array,"1") # 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'] #

或者,实质上:

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用于特定于类型的命令并不是一个好主意。 数组结构在这里很有用。 list保留值的数据类型。

对于我发现相当讨厌的东西:数据类型被指定为array()中的第一个参数,但(通常)是np.array()中的第二个参数。 :|

与C的关系在这里提到: Python List vs. Array - 何时使用?

玩得开心!

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

#12楼

一些贡献表明python中的数组由列表表示。 这是不正确的。 Python在标准库模块array “ array.array() ”中有一个独立的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()是有序的齐次序列,而列表是非同构序列。

#13楼

我认为你(意味着)想要一个已填充前30个单元格的列表。 所以

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

可以使用它的一个例子是Fibonacci序列。 请参阅Project Euler中的问题2

#14楼

JohnMachin的评论应该是真正的答案。 在我看来,所有其他答案都只是解决方法! 所以:

array=[0]*element_count #15楼

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

为了计算,使用像这样的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数组可以从磁盘中保存和加载(甚至是压缩的),并且具有大量元素的复杂计算速度很快。 很多用于科学环境。 请看这里了解更多......



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有