这一篇主要说的是,列表的基本操作,在其中会调用Python中的很多内置方法。
什么是列表?什么是元组?
Python有6个序列的内置类型,但最常见的是列表和元组。
类表是Python中最基本的数据结构。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
元组就是不可变的列表。
列表(list)
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。(列表的数据项不需要具有相同的类型)
Ex:
list = ["a","b","c",1,2,3]
list1 = ["a","b","c","d",]
list2 = [1,2,3,4,1,1]
列表的基本操作
现在有列表:names = ["Zhangsan","Lisi","WangMazi","SomeOne"],现在对列表做如下操作:
(1)列表的查找
1 #通过列表下标查找
2 print("下标查找:",names[0])3 #通过两个值来查找中间的内容(顾头不顾尾)
4 print("范围查找:",names[1:3])5 #下标前加数字则表示倒着数 (-1表示最后一个)
6 print("第一个开始查找:",names[:3])7 print("取最后一个值:",names[-1])8 #同样可以进行范围查找
9 print("负数下标查找:",names[-2:-1])10 #如果此时-1省略不写,则表示查找到最后
11 print("倒数查找到最后:",names[-2:])
View Code
结果:
D:\Python\python.exe D:/Pyproject/bogle.py
下标查找: Zhangsan
范围查找: ['Lisi', 'WangMazi']
第一个开始查找: ['Zhangsan', 'Lisi', 'WangMazi']
取最后一个值: SomeOne
负数下标查找: ['WangMazi']
倒数查找到最后: ['WangMazi', 'SomeOne']
Process finished with exit code 0
通过下标来查找位置时,如果有两个参数,中间用冒号“:”分隔
(2)列表的修改
1 #创建名字列表
2 names = ["Zhangsan","Lisi","WangMazi","SomeOne"]3 #通过下标来修改
4 print("未修改列表:",names)5 names[1] = "XiaoMing"
6 print("修改后列表:",names)
View Code
结果:
D:\Python\python.exe D:/Pyproject/bogle.py
未修改列表: ['Zhangsan', 'Lisi', 'WangMazi', 'SomeOne']
修改后列表: ['Zhangsan', 'XiaoMing', 'WangMazi', 'SomeOne']
Process finished with exit code 0
如果想要查找一个已经知道的名字的下标,然后再进行修改。查找位置方法:index =names.index("Zhangsan") 返回值为“Zhangsan”的下标:0
(3)列表的增加
1 #创建名字列表
2 names = ["Zhangsan","Lisi","WangMazi","SomeOne"]3 #打印列表
4 print("初始数据:",names)5 #调用append方法,将数据插入到列表最后
6 names.append("Sunshine")7 print("Append后:",names)8 #调用insert方法,数字代表插入到那个位置之前
9 names.insert(1,"Others")10 print("Insert后:",names)
View Code
结果:
D:\Python\python.exe D:/Pyproject/bogle.py
初始数据: ['Zhangsan', 'Lisi', 'WangMazi', 'SomeOne']
Append后: ['Zhangsan', 'Lisi', 'WangMazi', 'SomeOne', 'Sunshine']
Insert后: ['Zhangsan', 'Others', 'Lisi', 'WangMazi', 'SomeOne', 'Sunshine']
Process finished with exit code 0
上面使用的方法为Python库中的内置方法,一般append方法使用的多一点
(4)列表的删除
1 #创建名字列表
2 names = ["Zhangsan","Lisi","WangMazi","SomeOne"]3 #打印列表
4 print("初始数据:",names)5 #调用remove删除,参数是列表里的值
6 names.remove("Zhangsan")7 print("Remove后:",names)8 #调用pop删除,参数是下标
9 names.pop(0)10 print("pop加参数:",names)11 #pop不加参数时,表示删除最后一个
12 names.pop()13 print("pop不加参数:",names)
View Code
结果:
D:\Python\python.exe D:/Pyproject/bogle.py
初始数据: ['Zhangsan', 'Lisi', 'WangMazi', 'SomeOne']
Remove后: ['Lisi', 'WangMazi', 'SomeOne']
pop加参数: ['WangMazi', 'SomeOne']
pop不加参数: ['WangMazi']
Process finished with exit code 0
(5)其它方法
1 #创建两个列表
2 list_split =[]3 names = ['Some One like you!','WangMazi',1,2,1,1,2,3]4 names1 = ['D','a','A','c','C']5 #打印列表
6 print("初始数据:",names)7 #调用split,分片,按空格分片
8 list_split = names[0].split(" ")9 print("Split分片方法:",list_split)10 #调用count,统计1的个数
11 print("count统计方法:",names.count(1))12 #调用rvserse,反转
13 names.reverse()14 print("reverse反转:",names)15 #调用sort,按照ASCILL排序
16 names1.sort()17 print("sort排序ASCILL顺序:",names1)18 #调用extend,将一个列表合并到另外一个列表
19 names.extend(names1)20 print("extend合并后列表:",names)
View Code
结果:
D:\Python\python.exe D:/Pyproject/bogle.py
初始数据: ['Some One like you!', 'WangMazi', 1, 2, 1, 1, 2, 3]
Split分片方法: ['Some', 'One', 'like', 'you!']
count统计方法: 3
reverse反转: [3, 2, 1, 1, 2, 1, 'WangMazi', 'Some One like you!']
sort排序ASCILL顺序: ['A', 'C', 'D', 'a', 'c']
extend合并后列表: [3, 2, 1, 1, 2, 1, 'WangMazi', 'Some One like you!', 'A', 'C', 'D', 'a', 'c']
Process finished with exit code 0
列表都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法
列表是可以进行层层嵌套的,要读取时也是根据下标读取。
names = ["Zhangsan","Lisi","WangMazi",["Tom","Jack"],"SomeOne"]
要读取Tom时:names[3][0]
嵌套列表时的浅层复制方法:copy
1 names = ["Zhangsan","Lisi","WangMazi",["Tom","Jack"],"SomeOne"]2 names2 = names.copy() #浅复制 列表里还有列表 其实是一个独立的指针
3 print("原始列表names:",names)4 print("cpoy的列表names2",names2)5 #修改原列表的第一层时不会变
6 names[1]="李四"
7 #修改原来的列表的嵌套列表里的值时,使用copy方法的来的也会变
8 names[3][0]="汤姆"
9 print("修改后的列表names:",names)10 print("names修改后,列表names2:",names2)
View Code
结果:
D:\Python\python.exe D:/Pyproject/day2/copy.py
原始列表names: ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
cpoy的列表names2 ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
修改后的列表names: ['Zhangsan', '李四', 'WangMazi', ['汤姆', 'Jack'], 'SomeOne']
names修改后,列表names2: ['Zhangsan', 'Lisi', 'WangMazi', ['汤姆', 'Jack'], 'SomeOne']
Process finished with exit code 0
3种浅复制方式
用处:创建联合账户
1 #3种浅复制方式
2 names = ["Zhangsan","Lisi","WangMazi",["Tom","Jack"],"SomeOne"]3 print("原始数据:",names)4 #copy方法
5 names2 =names.copy()6 print("cpoy方法:",names2)7 #参数控制
8 names2 =names[:]9 print("参数控制:",names2)10 #工厂函数
11 names2 =list(names)12 print("工厂函数:",names2)
View Code
结果:
D:\Python\python.exe D:/Pyproject/day2/copy.py
原始数据: ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
cpoy方法: ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
参数控制: ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
工厂函数: ['Zhangsan', 'Lisi', 'WangMazi', ['Tom', 'Jack'], 'SomeOne']
Process finished with exit code 0
如果想要完整的复制一份(深copy)
import copy
name2 = copy.deepcpoy(names)
print(names)
print(names2)
如何遍历列表?
可以使用循环的方式遍历列表
1 names = ['Zhang','Shun','Qian','Sunshine']2 #循环遍历列表
3 for i innames:4 print(i)5 print("**************************")6 #通过控制参数,来打印,最后一个字代表每个几个下标打印一次
7 print("参数控制:",names[0:-1:2])8 #从头到尾可以直接不写
9 print("默认参数:",names[::2])
D:\Python\python.exe D:/Pyproject/bogle.py
Zhang
Shun
Qian
Sunshine
**************************
参数控制: ['Zhang', 'Qian']
默认参数: ['Zhang', 'Qian']
Process finished with exit code 0
元组(tuple)
就是不可变的列表,定义时使用圆括号如下:
name=("One","Two","Three","Four")
只有两个方法 count()、index()