内容正文:
数 组
1、数组概念及定义
数组是由相同类型的变量构成的一个序列。
通常使用一个数组名和下标对其进行访问。如a[5]
静态数组一旦定义长度不变,按顺序存储。
A
数组的定义有两种常用方式:
1.定义一个长度为10的整型数组,初始值都为0
a=[0]*10
a=[0 for i in range(10)]
2.定义一个长度为6的随机数组,取值范围为[1,9]
a=[random.randint(1,9) for i in range (6)]
1、数组概念及定义
2、数组元素的插入
数组a下标 0 1 2 3 4
值 3 8 11 14 17
1.在第2位插入数值10,应该怎么做?
3.插入位置用变量i表示,值用X表示,数组长度为n,完成代码填空。
for j in range( _____________):
a[j+1]=a[j]
_____=X
n=_______
n-1,i-1,-1
a[i]
n+1
1 注意移动的方向
先移后插
2 插入的位置
2.先移第2位还是先移第4位,还是两者都可以?
被覆盖
数组添加python自带函数
a.insert(i,x) 在i位添加x
a.append(x) 在末尾添加x
3.数组元素的删除
数组a下标 0 1 2 3 4
值 3 8 11 14 17
1.在第2位删除数值11,应该怎么做?
3.删除位置用变量i表示,值用X表示,数组长度为n,完成代码填空。
for j in range( _____________):
a[j+1]=a[j]
n=_______
i+1,n
n-1
2.这次方向是?
注意 总量的变化
后面前移
从前往后
数组删除用python自带函数实现
a.pop(i) 删除下标为i的元素
del a[i]
还可以删除范围del a[ : ]
4.删除重复数
arr=[3,5,3,1,5,4]
算法1:使用变量j逆序扫描数组,再利用pop(j)方法直接删除重复元素
def dedup_1(arr):
i=0
while i<len(arr):
for j in range(__________):
if arr[j]==arr[i]:
arr.pop(j)
i+=1
len(arr-1,i,-1)
3,5,3,1,5,4
i
j
一定要逆序扫描吗?顺序可以吗?
不可以,因为pop删除后,后面的数会前移,i是往后走的,会忽略掉后面的一个数(1)。
4.删除重复数
arr=[3,5,3,1,5,4]
算法2:使用变量c统计重复数,再通过arr[j-c]=arr[j]高效删除重复数。
def dedup_2(arr):
i,n=0,len(arr)
while i<n:
c=0
for j in range(i+1,n):
if arr[j]==arr[i]:
c+=1
else:
________
n-=c
i+=1
del arr[n: ]
arr[j-c]=arr[j]
3,5,3,1,5,4
i
j
思路:后面前移的位数由前面需要删除的个数决定
4.删除重复数
arr=[3,5,3,1,5,4]
算法3:使用变量r记录剩余元素有边界,再通过arr[r]=arr[j]高效删除重复数。
def dedup_3(arr):
i,n=0,len(arr)
while i<n:
r=i+1
for j in range(i+1,n):
if __________:
arr[r]=arr[j]
r+=1
n=r
i+=1
del arr[n: ]
3,5,3,1,5,4
arr[j]!=arr[i]
i
j
r
思路:重新定义数组下标,将符合条件的元素重新放进数组中
练习
1、下列实例中的数据不适合使用数组来存储的是( )
A.全班所有同学的身高信息
B.妈妈在账本上记录每个月的家庭收支情况
C.小明规划暑假自驾游路线,并根据家人建议对其进行了多次修改
D.评委给参加校园歌手大赛的选手打分
2.一个数组第一个元素的存储位置是1000(表示在第1000个字节处),每个元素所占空间大小为8个字节,则第5个元素的位置是( )
A.1000 B.1040
C.1032 D.1256
C
C
3.有如下python程序段:
a=[0]*9
n=5
for i in range(n):
a[i]=2*i+1
print(a)
p=3
×=6
for i in range(n-1,p-1,-1):
a[i+1]=a[i]
a[p]=x
执行程序后,a[3]和a[n]的值分别为(