序列 & 列表
序列
序列的概念
- 是一种数据结构
- 拥有一块可以存储多个值的、连续的内存空间
- 用于存储一组有序的数据
序列的分类
- 可变序列:序列中的元素可以改变。eg:列表(list)、字典(dict)、集合(set)
- 不可变序列:序列中的元素不可以改变。eg:元组(tuple)、字符串(string)
列表
列表的概念
- 是一种对象
- 拥有一块可以存储多个值的、连续的内存空间
- 用于存储一组有序的数据,即列表的元素
- 元素的数据类型不限
列表的使用
基本操作
- 创建列表:通过 [] 创建列表
list1 = [] # 创建空列表
list2 = [1, 2, 3, 4]
print(list1, list2)
# ----------输出----------
# [] [1, 2, 3, 4]
- 元素的获取:通过索引获取指定元素
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1[0], list1[3])
# ----------输出----------
# Sun WuKong Tang Monk
索引为负数的话,从右往左数
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1[-1], list1[-3])
# ----------输出----------
# Tang Monk Zhu Bajie
切片操作
用于获取列表中的子列表
语法:list [ start : end : step ] -> [ start, end ) -> 是一个左闭右开区间
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1[1:3])
# ----------输出----------
# ['Zhu Bajie', 'Monk Sha']
- start:起始位置 -> 默认为 0,可不写
- end:结束位置 -> 默认是最后一个元素的下一个位置,可不写
- step:步长 -> 默认是1,可不写;不能为 0;步长为负数的话,从右往左数
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1[0:2])
print(list1[::2])
print(list1[1:3:-1])
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie']
# ['Sun WuKong', 'Monk Sha']
# ['Monk Sha', 'Zhu Bajie']
常用操作
- 列表的拼接 + & *****
- + 进行列表之间的拼接
list1 = ['Sun WuKong', 'Zhu Bajie']
list2 = ['Monk Sha', 'Tang Monk']
print(list1 + list2)
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
- ***** 指定列表的重复次数
list1 = ['Sun WuKong', 'Zhu Bajie']
print(list1 * 2)
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie', 'Sun WuKong', 'Zhu Bajie']
- in 和 not in
-
in 用于检测指定元素是否在列表中
-
not in 用于检测指定元素是否不在列表中
-
符合返回 Ture,否则返回 Flase
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print('Sun WuKong' in list1)
print('White bone essence' not in list1)
# ----------输出----------
# True
# True
- len(listName) 获取并返回元素的个数
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(len(list1))
# ----------输出----------
# 4
- max(listName) & min(listName) 获取列表中的最值
- 比较的是 ASCII 大小
list1 = [1, 2, 3, 4, 5, 100, 6, 7]
print(max(list1), min(list1))
# ----------输出----------
# 100 1
list2 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(max(list2), min(list2))
# ----------输出----------
# Zhu Bajie Monk Sha
- sum() 可以返回数字列表的总和
list1 = [1, 2, 3, 4, 5, 100, 6, 7]
print(sum(list1))
# ----------输出----------
# 128
- listName**.index(Element, Start, End)** 返回指定元素在列表中第一次出现的位置
- 始末位置是 [ Start, End ) -> 左闭右开区间,可不写
- 找不到该元素会报错
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1.index('Monk Sha', 2, 4))
# ----------输出----------
# 2
- listName**.count(Element)** 返回指定元素在列表中出现的次数
list1 = ['Monk Sha', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1.count('Monk Sha'))
# ----------输出----------
# 2
列表的修改
(1)添加
- 调用函数 listName**.append()** 在列表的最后,追加一个元素
list1 = ['Sun WuKong', 'Zhu Bajie']
list1.append('Erlang God')
print(list1)
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie', 'Erlang God']
- 调用函数 listName**.insert(Index, Element)** 在列表的指定位置,插入一个元素
list1 = ['Sun WuKong', 'Zhu Bajie']
list1.insert(1, 'Erlang God')
print(list1)
# ----------输出----------
# ['Sun WuKong', 'Erlang God', 'Zhu Bajie']
- 调用函数 listName**.extend()** 在列表的最后,追加一个序列
list1 = ['Zhu Bajie']
list1.extend(['Wheezing dog', 'Erlang God'])
print(list1)
# ----------输出----------
# ['Zhu Bajie', 'Wheezing dog', 'Erlang God']
(2)删除
- 调用函数 listName**.clear()** 清空一个序列
list1 = ['Sun WuKong', 'Zhu Bajie']
list1.clear()
print(list1)
# ----------输出----------
# []
- 调用函数 listName**.pop(Index)** 根据索引删除并返回指定的元素,默认是最后一个元素
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1.pop(2))
print(list1)
# ----------输出----------
# Monk Sha
# ['Sun WuKong', 'Zhu Bajie', 'Tang Monk']
- 调用函数 listName**.remove(Element)** 移除指定的元素
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1.remove('Sun WuKong')
print(list1)
# ----------输出----------
# ['Zhu Bajie', 'Monk Sha', 'Tang Monk']
- 通过关键字 del ,配合索引删除指定元素
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
del list1[2]
print(list1)
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie', 'Tang Monk']
配合切片可以删除一段子序列
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
del list1[0:2]
print(list1)
# ----------输出----------
# ['Monk Sha', 'Tang Monk']
- 通过切片进行删除
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[1:3] = []
print(list1)
# ----------输出----------
# ['Sun WuKong', 'Tang Monk']
(3)修改
- 通过索引修改元素
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[2] = 'Erlang God'
print(list1)
# ----------输出----------
# ['Sun WuKong', 'Zhu Bajie', 'Erlang God', 'Tang Monk']
-
通过切片进行元素的替换
字符串会被拆分为一个个字母
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[0:3] = 'abcd'
print(list1)
# ----------输出----------
# ['a', 'b', 'c', 'd', 'Tang Monk']
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[0:3] = 'ab'
print(list1)
# ----------输出----------
# ['a', 'b', 'Tang Monk']
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[0:2] = ['Princess Iron Fan']
print(list1)
# ----------输出----------
# ['Princess Iron Fan', 'Monk Sha', 'Tang Monk']
如果设置了步长,替换的元素个数与被替换的元素个数需要一致
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1[::2] = ['Princess Iron Fan', 'Bull Demon King']
print(list1)
# ----------输出----------
# ['Princess Iron Fan', 'Zhu Bajie', 'Bull Demon King', 'Tang Monk']
(4)排序
- 调用函数 listName**.sort()** 可对列表中的元素进行排序,默认是升序 ( 按照ACSII码 )
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1.sort()
print(list1)
# ----------输出----------
# ['Monk Sha', 'Sun WuKong', 'Tang Monk', 'Zhu Bajie']
降序 listName**.sort(reverse=True)**
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1.sort(reverse=True)
print(list1)
# ----------输出----------
# ['Zhu Bajie', 'Tang Monk', 'Sun WuKong', 'Monk Sha']
- 函数 sorted( array ) 可对序列进行排序,并返回排序后的新序列,原序列不变。
list1 = [5, 2, 3, 1, 4]
print(sorted(list1, reverse=True)) # 倒序
print(list1)
# ----------输出----------
# [5, 4, 3, 2, 1]
# [5, 2, 3, 1, 4]
- 调用函数 listName**.reverse()** 颠倒原列表的排序
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list1.reverse()
print(list1)
# ----------输出----------
# ['Tang Monk', 'Monk Sha', 'Zhu Bajie', 'Sun WuKong']
- 函数 reversed( array ) 可对序列进行排序,并返回一个反转的迭代器,原序列不变。
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(reversed(list1))
print(next(reversed(list1)))
print(list1)
# ---------- 输出 ----------
# <list_reverseiterator object at 0x000002A83F468048>
# Tang Monk
# ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
- 通过切片 listName**[::-1]** 设置负步长,将原列表反向取出,原序列不变。
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
print(list1[::-1])
# ----------输出----------
# ['Tang Monk', 'Monk Sha', 'Zhu Bajie', 'Sun WuKong']
(5)复制
- 使用切片拷贝列表,获得的列表 value 一样,id 不一样
list1 = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
list2 = list1[:]
list2.append('Tang Monk')
print(list1)
print(list2)
# ----------返回----------
# ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
# ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk', 'Tang Monk']
- 使用函数 copy() 实现拷贝
list1 = [5, 2, 3, 4, 1]
list2 = list1.copy()
print(list1, id(list1))
print(list2, id(list2))
# ----------返回----------
# [5, 2, 3, 4, 1] 2479350096520
# [5, 2, 3, 4, 1] 2479350926280
for in 循环
可与序列配合使用,进行遍历操作
语法:for value in array : code block
① value:array 中的元素;② array:进行遍历的序列
students = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
for student in students:
print(student)
# ----------返回----------
# Sun WuKong
# Zhu Bajie
# Monk Sha
# Tang Monk
enumerate() 函数
配合 for in 循环 使用,可以在取出元素的时候,把索引也取出
students = ['Sun WuKong', 'Zhu Bajie', 'Monk Sha', 'Tang Monk']
for index, value in enumerate(students):
print(index, value)
# ----------返回----------
# 0 Sun WuKong
# 1 Zhu Bajie
# 2 Monk Sha
# 3 Tang Monk
range ( start, end, step )
① start:开始位置 -> 默认为 0 -> 可不写;② end:结束位置;③ step:步长 -> 默认为 1 -> 可不写
用于生成 [ start, end ) 的一系列数字
for value in range(5):
print(value)
# ----------返回----------
# 0
# 1
# 2
# 3
# 4
可用 list() 将这些数字转换为列表
numbers = list(range(0, 5, 1))
print(numbers)
# ----------返回----------
# [0, 1, 2, 3, 4]
列表推导式
用于以较少的代码,创建一些特殊列表
语法:listName = [expression for value in array]
① expression:返回的元素值,写的是表达式;② value:序列中元素的值;③ array:遍历的序列
eg:创建并返回一个由1~10的平方组成的列表
squares = [value**2 for value in range(1, 11)]
print(squares)
# ----------返回----------
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]