Python中的列表详解
一、列表是什么?
List是python中的一种数据类型,它由一组有序的元素组成。支持字符、数字、字符串甚至也可以包含列表(列表中有列表,嵌套),元素间用逗号进行分隔。
列表用[]进行标识。
二、列表的访问与操作
1.列表的定义
(1)定义一个空列表:
list_stu1 = []
list_stu2 = list()
(2)定义一个有学生信息的列表:
list_stu1 = ['张三',19,'男','长沙',13434343434] #使用一个列表存一个学生的基本信息
print(list_stu1)
list_stu2 = [['张三',19,'男','长沙',13434343434], #通过列表嵌套存多个学生的信息
['李四',18,'男','武汉',13535353535],
['王五',22,'女','上海',13636363636]]
print(list_stu2)
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434]
[[‘张三’, 19, ‘男’, ‘长沙’, 13434343434], [‘李四’, 18, ‘男’, ‘武汉’, 13535353535], [‘王五’, 22, ‘女’, ‘上海’, 13636363636]]
2.列表的访问
列表是有序的集合,要访问其中的元素,可以通过下标的方式进行访问(类似数组访问)
(1)下标是从0开始,最长不超过len(list)-1
存在学生信息列表:
list_stu1 = ['张三',19,'男','长沙',13434343434]
print(len(list_stu1)) print(list_stu1[0]) #取出学生信息的姓名
print(list_stu1[1]) #取出学生信息的年龄
print(list_stu1[len(list_stu1)]) #报错,越界
(2)可以通过list[头下标:尾下标]的方式截取列表元素(闭头开尾原则)
访问列表需注意:
1、从左到右:从0开始代表第一个数值, 1代表第二个数值 往后以此类推
2、从右到左:从-1开始代表最后一个值,-2代表倒数第二个值 往前以此类推
只打印学生的年龄及性别:
print(list_stu1[1:3]) #下标是从0开始,且尾下标是3
print(list_stu1[-4:-2]) #从右边开始下标从1开始,且开尾原则
查看姓名外的所有信息:
print(list_stu1[1:]) #尾下标不填,默认取到元素的最后一个
print(list_stu1[-4:])
print(list_stu1[1:len(list_stu1)+1]) #由于尾下标是开区间,因此最大为len(list)+1
(3)访问嵌套列表
存在嵌套列表
list_stu2 = [['张三',19,'男','长沙',13434343434],
['李四',18,'男','武汉',13535353535],
['王五',22,'女','上海',13636363636]]
取出第一个学生的所有信息:
print(list_stu2[0])
打印第一个学生的年龄:
print(list_stu2[0][1]) #看成一个二维数组进行访问
3.修改列表的值
修改list_stu2中第二个学生的年龄加1
list_stu2[1][1] = list_stu2[1][1]+1
print(list_stu2)
4.列表的连接与重复操作
加号(+)是列表连接运算符
星号()是重复操作*
list_stu3 = list_stu1 + list_stu2 #连接两个列表
print(list_stu3)
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434, [‘张三’, 19, ‘男’, ‘长沙’, 13434343434], [‘李四’, 18, ‘男’, ‘武汉’, 13535353535], [‘王五’, 22, ‘女’, ‘上海’, 13636363636]]
print(list_stu1 * 2) #将list_stu1输出两次
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434, ‘张三’, 19, ‘男’, ‘长沙’, 13434343434]
三、列表的常用方法
L.append(var) #追加元素
list_stu1.append('12345678@hnxmxit.com') #添加12345678@hnxmxit.com元素
list_stu3= ['赵六',18,'男','武汉',13535353535]
list_stu2.append(list_stu3) #追加列表
print(list_stu1)
print(list_stu2)
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434, ‘12345678@hnxmxit.com’]
[[‘张三’, 19, ‘男’, ‘长沙’, 13434343434], [‘李四’, 18, ‘男’, ‘武汉’, 13535353535], [‘王五’, 22, ‘女’, ‘上海’, 13636363636], [‘赵六’, 18, ‘男’, ‘武汉’, 13535353535]]
L.insert(index,var) #在指定位置插入元素
在列表的第2个位置插入身份证号
list_stu1.insert(1,'431123201912071234') #指定位置插入
L.pop(var) #返回最后一个元素,并从list中删除之
list_stu1.pop() #删除最后一个元素
list_stu1.pop(3) #删除指定位置的元素
L.remove(var) #删除第一次出现的该元素
list_stu1.remove(19) #删除第一次出现的指定元素
list_stu1.remove('newdream') #报错,列表不存在指定元素
L.count(var) #该元素在列表中出现的个数
print(list_stu1.count(19)) #统计指定元素出现的次数,并返回次数
L.index(var) #该元素的位置,无则抛异常
print(list_stu1.index('男')) #返回元素所在的位置
print(list_stu1.index('newdream')) #抛异常,不存在该元素
L.extend(list) #追加list,即合并list到L上
a = 'newdream'
list = ['newdream']
list_stu1.extend(a) #将变量的值合并到列表,并拆分成为列表的元素
list_stu1.extend(list) #将另一个列表合并到列表
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434, ‘n’, ‘e’, ‘w’, ‘d’, ‘r’, ‘e’, ‘a’, ‘m’, ‘newdream’]
L.sort() #排序
list_stu1.sort() #报错,类型不统一
list1 = [0,1,0,3,1,8]
list2= ['c','y','a','b']
list1.sort() #按数值的升序排序,且会改变原列表的顺序
print(list1)
list2.sort() #按字母的升序排序,且会改变原列表的顺序
print(list2)
L.reverse() #反转
list_stu1 = ['张三',19,'男','长沙',13434343434]
list_stu1.reverse() #反转列表元素
print(list_stu1)
[13434343434, ‘长沙’, ‘男’, 19, ‘张三’]
四、列表的拷贝
列表的拷贝有两种:
1.通过指向同一地址,使两个列表指向同一个内存地址,从而实现拷贝。
好比人都有名字,有些有小名,但是指的都是同一个人,当这个人换了衣服,那不管叫的是这个人的名字还是小名,都是指这个换了衣服的人
list_stu1 = ['张三',19,'男','长沙',13434343434]
list_stu3 = list_stu1 #两个列表指向同一个地址
list_stu3[0]='拷贝的张三' #当一个列表修改元素值时,两个列表都相应的做修改了
print(list_stu3)
print(list_stu1)
print(id(list_stu1)) #指向的是同一个内存地址
print(id(list_stu3))
[‘拷贝的张三’, 19, ‘男’, ‘长沙’, 13434343434]
[‘拷贝的张三’, 19, ‘男’, ‘长沙’, 13434343434]
2.将列表的元素拷贝给了另一个列表,且两个列表间的元素互不影响
list_stu1 = ['张三',19,'男','长沙',13434343434]
list_stu3 = list_stu1[:] #将所有元素赋给另一个列表
list_stu3[1] = 20 #当修改一个列表的值时,另一个列表的元素不受影响
print(list_stu1)
print(list_stu3)
print(id(list_stu1))
print(id(list_stu3))
[‘张三’, 19, ‘男’, ‘长沙’, 13434343434]
[‘张三’, 20, ‘男’, ‘长沙’, 13434343434]
18695672
18696832