Python 中的数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字、字符、甚至可以是其他数据结构 在 Python 中,最基本的数据结构是序列(列表和元组),序列中的每个元素都有一个序号(元素的具体位置),这个序号叫索引,索引下标从 0 开始,以此类推……
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
1 2 3 |
list1 = ['baidu', 'google', 12, 34]; list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d"]; |
如果对字符串赋值后想要改变字符串中的某个值,因为字符串不能像列表一样可更改,如果想改变这时候可以利用 list 函数,如下:
1 2 3 4 5 6 7 8 |
>>> ll=list('hello') >>> ll ['h', 'e', 'l', 'l', 'o'] >>> ll[2] 'l' >>> ll[2]='5' >>> ll ['h', 'e', '5', 'l', 'o'] |
注意:list 函数适用于所有类型的序列,而不只是字符串
len 函数返回列表中的元素个数
1 2 3 |
>>> list1 = ['baidu', 'google', 12, 23]; >>> len(list1) 4 |
max 函数返回列表元素最大值
1 2 3 |
>>> list_num=[2,3,5,6,8,12] >>> max(list_num) 12 |
返回列表元素最小值
1 2 3 |
>>> list_num=[2,3,5,6,8,12] >>> min(list_num) 2 |
列表提供了几个详细的方法,这些方法用于检查或者修改列表中的内容
append 方法用于在列表的末尾追加新的内容
1 2 3 4 |
list_append = [1,2,3,4] list_append.append(5) list_append [1, 2, 3, 4, 5] |
count 方法用于统计某个元素在列表中出现的次数
1 2 3 4 5 6 7 8 9 10 11 |
num [1, 2, 3, 4, 5, 5, 5, 5, 6] # 统计num列表中5出现的次数 num.count(5) 4 # 统计字母a出现的次数 name=['a','a','abf','ark','nhk'] name.count('a') 2 |
extend 方法表示追加内容,它可以在列表的末尾一次性追加另一个序列中的多个值,也就是用新列表扩展原有列表
1 2 3 4 5 6 |
a =[1,2,3] b = [4,5,6] # 将列表b追加在列表a后面 a.extend(b) a [1, 2, 3, 4, 5, 6] |
此操作和列表的相加操作,但是追加操作改变原有列表,而相加不改变原有列表,例如:
1 2 3 4 5 6 7 |
a = [1,2,3] b = [4,5,6] a + b [1, 2, 3, 4, 5, 6] # 连接操作不改变原有列表 a [1, 2, 3] |
index 方法用于从列表中找出某个元素第一次匹配的位置的索引位置
1 2 3 |
content = ['where','who','lisi','cntent','who'] content.index('who') 1 |
==注意:== 以上方法中有两个位置有‘who’,但是只找出了第一次匹配的索引位置元素
insert 方法用于像列表中插入对象
1 2 3 4 5 6 7 |
num = [1,2,5,6,7] num.insert(2,3) num [1, 2, 3, 5, 6, 7] num.insert(3,4) num [1, 2, 3, 4, 5, 6, 7] |
pop 方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值
1 2 3 4 5 6 7 8 9 |
x = [1,2,3] x.pop() 3 x [1, 2] x.pop() 2 x [1] |
注意:pop 方法是唯一一个既能修改列表又能返回元素值的方法(除了None),pop 和 append 方法是 Python 中数据结构的出栈和入栈,如果追加(append)刚刚出栈(pop)的值,得到的还是原来的列表
1 2 3 4 |
x = [1,2,3] x.append(x.pop()) x [1, 2, 3] |
remove 方法用于移除列表中第一个匹配的元素
1 2 3 4 5 6 |
content ['where', 'who', 'lisi', 'cntent', 'who', 'who'] # 移除了第一个匹配的元素 content.remove('who') content ['where', 'lisi', 'cntent', 'who', 'who'] |
reverse 方法是将列表中的元素进行反转操作
1 2 3 4 5 6 |
x [1, 2, 3] # 元素反向存储 x.reverse() x [3, 2, 1] |
sort 方法用于在原位置排序,‘原位置排序’意味着改变原来的列表而让列表中的元素有顺序排列
1 2 3 4 |
x = [2,3,5,6,1,4,7] x.sort() x [1, 2, 3, 4, 5, 6, 7] |
clear 方法用于清空列表
1 2 3 4 5 6 7 |
>>> list1=['baidu', 'google', 12, 23] >>> list1 ['baidu', 'google', 12, 23] # 清空列表内容 >>> list1.clear() >>> list1 [] |
copy 方法是复制列表
1 2 3 4 5 6 |
>>> list1 = ['baidu', 'google', 12, 23]; >>> list1.copy() ['baidu', 'google', 12, 23] >>> list2 = list1.copy() >>> list2 ['baidu', 'google', 12, 23] |
列表可以使用所有适用于序列的标准操作,比如第7天所学的索引、分片、连接和相乘,更有趣的是,列表是可以修改的,也就是定义的列表内容可以根据需求更改,本节介绍一些改变列表的方法:如元素赋值、元素删除、分片赋值以及列表方法(但是请注意,并不是所有的列表方法都能真正改变列表)
在列表中要给指定的元素赋值时,我们需要指定特定的索引标记来为列表中某个特定的,位置明确的元素赋值,比如 x[3]=5
1 2 3 4 5 6 7 8 |
# x=[1,2,3,4,5] x [1, 2, 3, 4, 5] # 改变列表第四个元素的内容 x[3]=5 x [1, 2, 3, 5, 5] |
==注意:== 不能为一个位置不存在的元素赋值,如果列表长度为2,则不能为索引为10 的元素进行赋值,如果需要赋值则需要创建一个长度为11的列表。
若要删除列表中的元素,直接利用del删除即可
1 2 3 4 5 6 7 8 9 10 11 |
# 定义长度为4的姓名列表 names=['zhangsan','lisi','wangwu','zhaoliu'] names ['zhangsan', 'lisi', 'wangwu', 'zhaoliu'] # 删除第三个元素 del names[2] # 最后列表长度由4变为3 names ['zhangsan', 'lisi', 'zhaoliu'] |
del 语句还能用于删除其他元素,也可以用于变量的删除操作。
在 Python 中对序列或者列表的分片操作是一个很强大的特性,分片赋值会显得更加强大,例如:
1 2 3 4 5 6 7 |
# 定义一个list name = list('Pyther') # 改变 list 中的最后两个值 name[4:]='on' name ['P', 'y', 't', 'h', 'o', 'n'] |
从上可知,程序可以一次为多个元素赋值,在分片赋值时,可以使用与原序列不等长的序列将分片替换,例如:
1 2 3 4 5 6 7 |
name_re = list('perl') name_re ['p', 'e', 'r', 'l'] # 分片替换 name_re[1:] = list('ython') name_re ['p', 'y', 't', 'h', 'o', 'n'] |
分片赋值还可以在不需要更改原有列表任何内容的情况下进行新元素插入
1 2 3 4 5 |
num = [1,4,5] # 在第一个元素后插入新的元素 num[1:1]=[2,3] num [1, 2, 3, 4, 5] |
同理也可以通过分片操作来删除列表中的元素,同样也支持负数分片操作
1 2 3 4 5 6 7 8 9 10 11 |
num [1, 2, 3, 4, 5] # 给第一个和迪桑元素之间分片赋值一个空序列,即删除元素 num[1:3] = [] num [1, 4, 5] # 负数分片操作 num[-1:-1] = [5,5,5] num [1, 2, 3, 4, 5, 5, 5, 5] |
本节给大家介绍了 Python 数据结构之列表的操作与使用,对 Python 工程师使用列表提供了支撑。
from:http://www.ityouknow.com/python/2019/09/03/python-008.html