Python_数组入门学习

本文深入讲解Python中列表的使用方法,包括定义、查询、添加、删除、修改、合并、统计、排序、反转、获取下标及复制等操作,是Python初学者和开发者不可多得的实用指南。

列表,数组操作

前沿

在开发中,我们通常需要存储各种复杂的关系型数据,比如我需要存储一件商品,如果我使用字符串来插入的,会很麻烦,如下 

goods = "1. 华为 6400,2. 三星 3220"

这样的字符串我们获取数据,会很麻烦,需要不断的切割,不仅麻烦,出错率还高.在python中,它跟别的语言一样,提供了列表(也就是数组)来针对该问题,它把一个对象划分了数个存储区域,来分别存储值,我们只需要按照响应的数据格式进行存储,就可以很轻易的获取/操作数据

goodArr = [1,"华为",6400]

这样的数据存储,能使得我们更轻易的获取数据,数组通过下标访问列表中的元素,下标从0开始计数列,如我要获取商品姓名,我只需要这样写

goodName = goodArr[1]

因为商品名称在数组的第二位,所以我们获取的时候应该写2,但是西方大多都是从0开始记数,所以 0 也要算一位数,既2-1,

 


列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

 

定义列表/查询数据

数组名 = ["值1","值2"]

通过下标访问列表中的元素,下标从0开始计数

names = ['Alex',"Tenglan",'Eric']
>>> names[0]
'Alex'
>>> names[2]
'Eric'
>>> names[-1]
'Eric'
>>> names[-2] #还可以倒着取
'Tenglan'

一次取出多个值

>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3] 
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['Rain', 'Tom', 'Amy'] 
>>> names[3:-1] #这样-1就不会被包含了
['Rain', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Alex', 'Eric', 'Tom'] 
>>> names[::2] #和上句效果一样
['Alex', 'Eric', 'Tom']

由于python中的数组是静态的,所以可以直接添加元素_添加元素

在数组最后面添加一个元素

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新来的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

 

在指定位置插入一个数据

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(2,"强行从Eric前面插入")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

>>> names.insert(5,"从eric后面插入试试新姿势")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

 

删除元素

>>>goods = [1,"华为",64000]

# 使用下标删除
>>>del goods[1]
>>>print(goods)
[1, 64000]


#指定key 删除
>>>goods = [1,"华为",64000]

>>>goods.remove("华为")
>>>print(goods)
[1, 64000]

#删除最后一个
>>>goods.pop()
[1]

 

修改

>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> names[2] = "该换人了"
>>> names
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

扩展_合并数组

>>>goodsHuaWei = [1,"华为",64000]
>>>goodsXiaoMi = [2,"小米",50000]

>>>goodsHuaWei.extend(goodsXiaoMi)
>>>print(goodsHuaWei)
[1, '华为', 64000, 2, '小米', 50000]

统计

>>>goosArr = [];
>>>goodsHuaWei = [1,"华为",64000]
>>>goodsXiaoMi = [2,"小米",50000]
>>>goodsSanxing = [2,"小米",50000]

>>>goosArr.extend(goodsXiaoMi)
>>>goosArr.extend(goodsSanxing)
>>>goosArr.extend(goodsHuaWei)

#统计价格是50000的商品
>>>goosArr.count(50000)
2

排序&反转

在python2中,数组排序是可以排序不同类型的数据的,但是在3中就会报错,


>>>arr = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]

>>>arr.sort()
TypeError: '<' not supported between instances of 'int' and 'str'

 

反转

#从大到小排序
>>>arr = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy']

>>>arr.sort()   #从小到大排序
>>>arr.reverse();  #反转
>>>print(arr)
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex']

获取下标

根据key获取该值在数组中的下标,如果key在arr中存在多个,那就将会返回第一个key的下标

>>>arr = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy']

>>>print(arr.index("Amy"))
2

复制

默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

>>>arr = ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy']

>>>arrCopy = arr

>>>arr[1] = "zs";
>>>print(arrCopy)
['Alex', 'zs', 'Amy', 'Tom', 'Amy']
>>>print(arr)
['Alex', 'zs', 'Amy', 'Tom', 'Amy']

copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

>>> import copy

>>> c=copy.copy(alist)
>>> print alist;print c
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
>>> alist.append(5)
>>> print alist;print c
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]

>>> alist[3]
['a', 'b']
>>> alist[3].append('cccc')
>>> print alist;print c
[1, 2, 3, ['a', 'b', 'cccc'], 5]
[1, 2, 3, ['a', 'b', 'cccc']] 里面的子对象被改变了

 

 

深copy,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

>>> import copy

>>> d=copy.deepcopy(alist)
>>> print alist;print d
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]始终没有改变
>>> alist.append(5)
>>> print alist;print d
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]始终没有改变
>>> alist[3]
['a', 'b']
>>> alist[3].append("ccccc")
>>> print alist;print d
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']]  始终没有改变

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值