这一篇主要说的是,列表的基本操作,在其中会调用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:])
结果:
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)
结果:
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)
结果:
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)
结果:
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)
结果:
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)
结果:
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)
结果:
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 in names: 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()