首页 > 编程知识 正文

python遍历数组,python数组下标为负数

时间:2023-05-06 04:53:10 阅读:26433 作者:4688

在编程语言中,实现集合的两种数据结构往往是数组和链表结构。 这两种结构以不同的方式在计算机内存中存储和访问数据。 这些方法反而导致对操作该集合的算法的不同时间/空间的取舍选择。

目录

1 .数组数据结构

1.1随机存取和连续存储器

1.2静态和动态内存

1.3物理大小和逻辑大小

2 .数组操作

2.1增加数组大小

2.2减小数组大小

2.3在数组中插入元素

2.4从数组中删除元素

3.2维数组

3.1网格类定义

3.2剑指报价:二维排列搜索

1 .数组数据结构

引用维基百科中的定义。 数组是由相同类型的元素(element )集合组成的数据结构,分配并存储连续的内存。 可以使用元素的索引(index )计算与该元素对应的存储地址。 数组表示可以在特定索引位置访问或替换的项目序列。 这和python的列表很相似。 实际上,pyhon列表所基于的数据结构是数组。 数组的长度和容量在创建时已固定。 python的array模块包含array类,但只能存储相同类型的变量。

接下来,我们将使用python内置的array模块轻松创建数组实例对象。 因为这不是本文的重点,所以我只做简单的演示:

python的第三方库numpy的阵列功能也非常强大,有兴趣的人可以自行查阅资料。

我们也可以自己定义Array类来实现简单的功能

1.1随机存取和连续存储器

计算机通过为数组条目分配连续的内存单元来支持对数组的随机访问。 数组按顺序存储在存储器中,可以通过下标直接配置在存储某个要素的地方。 因此,无论数组有多大,访问第一个元素所需的时间和访问最后一个元素所需的时间都是相同的。

上面是数组

的内存映射。 如果第一个元素的地址值为2000,则数组包含int整数,因此如果一个整数包含4个字节,则第二个元素的地址值为2004,第三个为2008,第四个为2012。 如果第I个位置地址值能够通过

取得。 其中,第一个元素的地址值是数组的基址。

1.2静态和动态内存

在一些语言中,数组是静态数据结构。 数组的长度和大小是在编译时确定的。 但是,在显示时,数组的长度会发生变化,无法预先决定数组的大小。 为了慎重起见,可以定义尽可能长的数组,但如果只存储一个元素,这显然是浪费空间。为了节省空间,请定义短长度的数组。 同样,如果要存储的元素数大于数组的长度,则此数组无法'放置要存储的数据。 Java和c支持动态数组,动态数组也占用连续的内存块,支持随机访问。 运行时不需要指定动态数组的长度。 实例化时只需指定动态数组的长度。 python也支持动态数组。

1.3物理大小和逻辑大小

物理大小:数组单元的总数,或创建数组时用于指定其容量的数字。

逻辑大小—当前在APP应用程序中可用的项目数,即使用的单元数

2 .数组操作

2.1增加数组大小

当插入新项且数组已满(即物理大小和逻辑大小相等)时,必须增加数组的大小。 调整大小的过程包括三个步骤:

1 .创建新的更大数组

2 .将数组从旧数组复制到新数组

3 .将旧数组变量重置为新数组对象

DEFALUT_CAPACITY=5

logicalSize=0

a=array(defalut_capacity ) )

iflogicalsize==Len(a ) :

temp=array(Len(a )1)创建原始数组1长度的临时数组

foriinrange (逻辑大小) : # )将旧数组的元素复制到临时数组中

temp[i]=a[i]

a=将a=temp #临时数组分配给a

向数组中添加n项的时间的复杂性是。 创建临时数组时,双精度数组的大小如下:

temp=Array(Len(a ) * 2) ) ) ) ) ) ) ) ) ) ) )

这样虽然减少了时间的复杂性,但牺牲的是内存空间。

2.2减小数组大小

数组的逻辑大小越小,内存空间就越浪费。 数组中逻辑大小与物理大小的比值定义为“加载因子”(load factor ),如果加载因子小于0.25,则可以通过与增加数组相反的操作来减少数组。 步骤如下。

1 .制造新的、更小的

数组

2.  将数组从旧的数组复制到新的数组中

3. 将旧的数组变量重新设置为新的数组对象

if logicalSize <= len(a) // 4 and len(a) >= DEFAULT_CAPACITY * 2: # 当装载因子小于0.25且数组长度大于等于默认容量的2倍时

temp = Array(len(a) // 2) # 创建临时数组,大小为原数组长度的二分之一

for i in range(logicalSize):

temp[i] = a[i]

a = temp

2.3 向数组中插入元素

向数组中插入元素步骤如下:

1. 因为插入元素会改变数组的逻辑大小,先看看数组的物理大小够不够,若不够那么增加数组大小

2. 从数组的逻辑末尾开始,直到目标索引位置,将每一项向后移动一位。

3. 将新的元素赋值给目标索引位置

4. 将逻辑大小增加1

# 如果需要,增加数组的物理大小

for i in range(logicalSize,targetIndex,-1): # 对数组中元素进行下移操作

a[i] = a[i-1]

a[targetIndex] = newItem # 将新的元素赋值给目标索引处

logicalSize += 1 # 将逻辑大小增加1

2.4 从数组中删除元素

从数组中删除元素是向数组中插入元素的反过程。步骤如下:

1. 从目标索引位置后一位置开始,到数组的逻辑末尾,将每一项都向前移动一位。

2. 将逻辑大小减1

3. 检查浪费的空间,有必要的话,将物理大小减1

for i in range(targetIndex,logicalSize-1): # 对数组中元素进行上移操作

a[i] = a[i + 1]

logicalSize -= 1 # 将逻辑大小减1

# 如果需要,减小物理大小

3. 二维数组

前面讲述的都是一维数组,二维数组类似于矩阵或者说是一个表格。使用两个下标来指定其行和列的位置。

3.1 定义Grid类

3.2 剑指offer:二维数组中的查找

实际上数组在python语言都可以被列表来代替,或者直接使用numpy.array来将列表转换为数组格式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。