前面三篇,我都在介绍字符串(str)类型,这一篇我们将进行列表(List)数据类型学习。在介绍列表前,我们先来了解一下Python序列的知识
一、序列
序列指的是一块可存放多个值的连续内存空间,这些值按一定的顺序排列,可通过每个值所在的位置的编号(索引)访问它们。看到这里我们是不是想到了下面这幅图:
是的,在Python中,序列类包括字符串、列表、元组、字典和集合,这些序列支持多种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
1.1Python提供的一些内置函数,可实现序列相关的一些常见操作。
len() | 计算序列的长度,即返回序列中包含多少个元素。 |
max() | 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。 |
min() | 找出序列中的最小元素。 |
list() | 将序列转换为列表。 |
str() | 将序列转换为字符串。 |
sum() | 计算元素和。 |
sorted() | 对元素进行排序。 |
reversed() | 反向序列中的元素。 |
enumerate() | 将序列组合为一个索引序列,多用在 for 循环中。 |
二、列表(List)
列表是最常用的Python数据类型,列表的数据项不需要相同的类型。
它是以方括号内逗号分隔值出现的。
2.1 创建一个列表
只需要把逗号分隔的不同数据所有项用方括号([ ])括起来即可
list1 = ['hello','python',18,19] #数据项可以为不同类型
list2 = [] #空列表
print(list1)
print(list2)
运行结果:
['hello', 'python', 18, 19]
[]
2.2、添加新的元素
list1.append() 在list1末尾增加一个元素
list1.insert(n,'n1') 在指定位置添加元素,如果指定的下标不存在,那么就在末尾添加
list1.extend(list2) 合并两个list1,list2
list1 = [1,2,3,4]
list2 = [7,8,9]
list1.append(6) #在list1末尾增加一个元素
print(list1)
list1.insert(4,5) #在list1索引为4的位置增加一个元素
print(list1)
list1.extend(list2) #在list1基础上合并list2
print(list1)
print(list2)
运行结果:
[1, 2, 3, 4, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 8, 9]
运行截图:
2.3查看列表中的值
list1 = [1,2,3,4,5,4]
print(list1[1]) #使用列表索引来访问列表的值,取从左到右第二个值
print(list1[-1]) #使用列表索引来访问列表的值,取最右边的值
print(list1.count(4)) #查看某个元素在这个列表里的个数,如果没有,就返回0
print(list1.index(4)) #查看某个元素的索引,如果有多个,则返回第一个,如果没有则会报错
print(list1.index(6)) #6不存在列表中,会返回错误
运行结果:
2
4
2
3
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T11.py", line 6, in
print(list1.index(6))
ValueError: 6 is not in list
List中的值遍历(for in 循环)
list1 = ['hello','python','world']
#使用for in 循环遍历
for item in list1:
print(item)
运行结果:
hello
python
world
for in 循环可遍历列表,字符串,字典,元组等序列,以后会有专门的篇幅进行讲解。
2.4 删除list中的元素
list1 = [1,2,3,4,5,6]
#pop()删除最后一个元素
print(list1.pop())
print(list1)
#pop()删除指定索引元素,如果索引不存在,则会报错
print(list1.pop(4))
print(list1)
#remove()删除list里面的元素,有多个相同的元素,删除和一个
print(list1.remove(3))
print(list1)
运行结果:
6 # list1.pop()返回的结果为删除的项
[1, 2, 3, 4, 5] #list1的列表值已删除指定元素
5 #list1.pop(4)返回的结果为删除的项
[1, 2, 3, 4] #list1的列表值已删除指定元素
None #list1.remove(3)删除成功后不返回删除的项
[1, 2, 4] #list1的列表值可确list1.remove(3)删除3成功
del 删除法
list1 = ['hello','python','world]
del list1[2] #删除列表下标为2的项
print(list1)
del list1 #删除整个列有,删除后列表无法访问
print(list1)
运行结果:
['hello', 'python']
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T11.py", line 5, in
print(list1)
NameError: name 'list1' is not defined
2.5 排序和反转(针对相同的数据类型)
list1 = [1,2,3,4,5,6]
print(list1.reverse()) #将列表反转
print(list1)
print(list1.sort()) # 排序,默认升序
print(list1)
print(list1.sort(reverse=True)) #降序排列
print(list1)
运行结果:
None #list1.reverse()不返回值
[6, 5, 4, 3, 2, 1] #新的list1项已与原项顺序反转
None #list1.sort()不返回值
[1, 2, 3, 4, 5, 6] #.sort()默认升序排列
None #list1.sort()不返回值
[6, 5, 4, 3, 2, 1] #.sort(reverse=True)降序排列
上述例子是对数值进行排序,那们下面代码是对列项为字符串进行排序。
list1 = ['hello','aython','word']
print(list1.reverse()) #将列表反转
print(list1)
print(list1.sort()) # 排序,默认升序
print(list1)
print(list1.sort(reverse=True)) #降序排列
print(list1)
运行结果:
None
['word', 'aython', 'hello']
None
['aython', 'hello', 'word']
None
['word', 'hello', 'aython']
字符串大小的对比规则是:先比较字符串第一个字母的ord()值,按值大小升降序,如果第一个字母ord()值一样,那么就进行第二个字母ord()值比较,直到分出大小为止。
我们来看看列表的三个字符串首字母的ord()值
print(ord('h'))
print(ord('a'))
print(ord('w'))
运行结果:
104
97
119
字符串排序,一看就明了。
2.6 操作列表的其他函数
list1 = ['hello','aython','word']
print(len(list1)) #返回列表元数个数
print(max(list1)) #返回列表元素最大值
print(min(list1)) #返回列表元素最小值
运行结果:
3
word
aython
2.7列表的切片
前面我们学习了字符串的切片,列表的切片跟字符串的操作方法一样。
我们先看看字符串切片中的一些内容:
正序索引是从左往右对字符串中的字符进行索引,第一个字符的索引从0开始。
倒序索引是从右往左对字符串中的字符进行索引,最右边的字符的索引从-1开始。
得到对应索引范围的元素,该范围包围起始端,
不包含结尾端(左闭右开型)默认截取方向从左往右。
注意:反向索引时,也是左闭右开型
按步长获取间隔的字符串,语法为
str1[start:end:step](切片语法:[起始:结束:步长])
按照step步长进行隔取;默认步长为1
大家可以先返回该系列教程中去再看一篇字符串切片方法,然后再来看我们List切片操作方法,就会感觉完全一样。
list1 = ['hello','python','word','very','good']
print(list1[0:3])
print(list1[-4:-1])
print(list1[1:4])
运行结果:(所有结果都为左闭右开型,即取起始索引值,不取结束索引值)
['hello', 'python', 'word'] #取索引为 0,1,2的值
['python', 'word', 'very'] #取索引为 -4,-3,-2的值
['python', 'word', 'very'] #取索引为 1,2,3的值
按步长来取值:list1[start:end:step]
其中start为超始索引,end为结束索引,step为步长,默认为1
list1 = [1,2,3,4,5,6,7,8,9]
print(list1[1:8:2])
运行结果:
[2, 4, 6, 8]
由此我们可以看到,List切片方法完全跟字符串一样,如果还有不明白请看第九篇字符串切片的相关知识。
结束语:
这一篇我们主要学习了列表(List),里面的各种操作函数方法。大家可以根据所看到的内容,自行深入的去了解,List也是非常重的Python数据类型。另外还有一个非常重的知识点没讲,列表生成式,这个知识将在讲 for in 循环遍历的时候再去讲。
☆ END ☆推荐阅读:
一步一步学Python3(小学生也适用) 第十篇: 字符串(str)类型(下)
一步一步学Python3(小学生也适用) 第九篇: 字符串(str)类型(中)
一步一步学Python3(小学生也适用) 第八篇: 字符串(str)类型(上)
一步一步学Python3(小学生也适用) 第七篇: 小数/浮点数(float)类型
一步一步学Python3(小学生也适用) 第六篇: 变量及整数(int)类型
长按关注"老树Python"