文章目录
变量类型之列表
一、列表的性质
- 列表,容器符号:[ ], 数据类型:list。
- 列表是可变的(可以进行增删改等操作)。
- 列表中允许出现重复的元素。
- 列表是有序的数据类型。
- 列表中可以保存任意类型的数据,它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
二、列表的基本操作
1. 列表能实现创建空列表、拼接、重复、成员运算,比较运算等基本操作。
-
a) 创建空列表,通过构造器语法,交换列表元素值
# 创建空列表 list1 = [] list2 = list(list1) print(list1, list2, list1 == list2) # [] [] True
-
b) 列表的拼接(生成一个新的列表)
list3 = [1, 1.1, True, 'wnm',[520], None, (1, 2, 3), {1, 2, 3}, {'name': 20}] print(list3 + list3) # 输出结果: [1, 1.1, True, 'wnm', [520], None, (1, 2, 3), {1, 2, 3}, {'name': 20},1, 1.1, True, 'wnm', [520], None, (1, 2, 3), {1, 2, 3}, {'name': 20}]
-
c) 列表的重复(生成一个新的列表)
list3 = [1, 1.1, True, 'wnm',[520], None, (1, 2, 3), {1, 2, 3}, {'name': 20}] print(list3 * 5) # 元素依次序重复五次放置新列表中。
-
d) 列表的成员运算(判断元素在不在列表中)
- 使用in、not in 来判断。
- 成员运算的返回结果一般是布尔值类型:True or False。
# 对象继续使用列表list3 print('wr' in list3 ) print('bcda' not in list3) print(1 in list3) print([1] in list3) # 输出的结果分别为: False True True False
-
e) 列表的比较运算
- 列表之间是可以比较大小的。
- 列表比较大小的是相同位置的第一对相同数据类型不同子元素的大小。
# 定义两个非空列表,比较大小 list4 = [1, 2, 3, 4] list5 = [1, 2, 4, 5] print(list4 > list5) # False list6 = [1, 2, 3, 4] list7 = [1, 2, 4, 3] print(list6 == list7) # False 列表是有序的,元素排列有顺序。
2. 列表是一种容器,也是一种可迭代对象,即可以进行遍历。列表的遍历又可以划分为以下三种:
-
a) 直接遍历:for 变量 in 列表:
list1 = ['A', 'B', 'C', 'D', 'C'] for i in list1: print(i) # 打印结果为: A B C D C
-
b) 间接遍历:可以通过列表的下标来实现间接遍历:
- 引入len()方法,获取有序容器的长度。
list1 = ['A', 'B', 'C', 'D', 'C'] print(len(list1)) # 5 for i in range(len(list1)): print(f'{i}-->{list1[i]}')
以上表达式的输出结果为:
0–>A
1–>B
2–>C
3–>D
4–>C
-
c) enumerate()元组遍历
- 能够将列表中的每个元素及其下标放到一个元组中,多个元组组成一个可迭代对象。
list1 = ['A', 'B', 'C', 'D', 'C'] print(enumerate(list1)) for content in enumerate(list1): print(content)
以上表达式的输出结果为:
<enumerate object at 0x0000016444A8EEC0> 枚举对象
(0, ‘A’)
(1, ‘B’)
(2, ‘C’)
(3, ‘D’)
(4, ‘C’)
3.列表的切片操作
- 列表一种有序的数据类型,可以根据它的下标来获取其中元素,也可以通过切片操作对列表元素进行重新划分,获取想要的列表。
-
列表的下标又可以分成 正向下标 和 负向下标 两种,一种是从左到右,从0开始计数,另一种是从右向左计数,起始下标为 -1。
-
切片操作不改变原容器数据类型。
-
切片操作[M:N:step] 为左闭右开区间 [M,N),step表示步长。
list1 = ['英雄联盟', 'CS:GO', '超级马里奥', '原神', '魂斗罗', '王者荣耀', 'PUBG'] # 下标取元素语法:有序容器[下标对应数字] print(list1[2] == list1[-5]) print(list[2]) print(list1[0:7]) print(list1[0:7:3]) print(list1[1:-2:3]) print(list1[-1:-8:-1]) # 开始和下标都不写,表示元素从头取到尾。 print(list1[:]) # 表示元素从尾取到头 print(list1[::-1]) # 表示元素从尾按步长为3来向头取元素 print(list1[::-3])
以上表达式的打印结果为:
True
超级马里奥[‘英雄联盟’, ‘CS:GO’, ‘超级马里奥’, ‘原神’, ‘魂斗罗’, ‘王者荣耀’, ‘PUBG’]
[‘英雄联盟’, ‘原神’, ‘PUBG’]
[‘CS:GO’, ‘魂斗罗’]
[‘PUBG’, ‘王者荣耀’, ‘魂斗罗’, ‘原神’, ‘超级马里奥’, ‘CS:GO’, ‘英雄联盟’]
[‘英雄联盟’, ‘CS:GO’, ‘超级马里奥’, ‘原神’, ‘魂斗罗’, ‘王者荣耀’, ‘PUBG’]
[‘PUBG’, ‘王者荣耀’, ‘魂斗罗’, ‘原神’, ‘超级马里奥’, ‘CS:GO’, ‘英雄联盟’]
[‘PUBG’, ‘原神’, ‘英雄联盟’]
-
4. 列表的相关方法
- 列表有:查找、值的统计、增删改、排序、统计次数等多种方法,下边详细介绍。
a:查找 index() b:增加 append、insert、extend c:修改 list1[i] = ‘value’ d:删除 del、reove、pop、clear(清空列表) e:数值统计 sum(求和)、max(最大值)、min(最小值) f:统计次数 count(统计列表中某个元素出现的次数) g:排序方法 reverse(对列表元素进行倒序排序),sort、sorted(对列表元素进行排序,默认升序排序)
# 查找列表元素:index
'''
index 方法默认从左向右查找,找到元素立即停止查找并返回下标。
可以指定index开始查找元素的位置,找不到会报错
'''
list1 = ['Java', 'Python', 'Java']
result = list1.index('Java')
print(result)
result1 = list1.index('Java', 1)
print(result1)
# 输出下标分别为: 0 2
# 增加
# append:追加,向列表的末尾添加元素
list1.append('HTML')
print(list1)
# ['Java', 'Python', 'Java','HTML']
# insert:插入,向列表的任意位置添加元素
list1.insert(0, 'C++'')
print(list1)
# ['C++','Java', 'Python', 'Java','HTML']
# extend:追加,从一个容器中将所有元素添加到列表中
list1.extend('123')
list1.extend(['Golong', 'ui'])
print(list1)
# ['C++', 'Java', 'Python', 'C', 'HTML', '1', '2', '3', 'Golong', 'ui']
# 改
# 语法: 有序容器[下标] = 值
list1[5] = 'Java'
print(list1)
# ['C++', 'Java', 'Python', 'C', 'HTML', 'Java', '2', '3', 'Golong', 'ui']
# 删
# del:del 有序容器[下标]
# del是根据容器元素下标来删除元素的
del list1[6]
print(list1)
# ['C++', 'Java', 'Python', 'C', 'HTML', 'Java', '3', 'Golong', 'ui']
# remove:根据元素删除,从左向右删除,如果某个元素重复,一次只删除一个
list1.remove('3')
print(list1)
# ['C++', 'Java', 'Python', 'C', 'HTML', 'Java', 'Golong', 'ui']
# pop:如果不给pop指定元素,删除的是列表中最后一个元素;或者给pop指定下标删除元素
# pop方法可以告诉你删除的是那个元素
list1.pop()
print(list1)
# ['C++', 'Java', 'Python', 'C', 'HTML', 'Java', 'Golong']
# clear(清空列表)
list1.clear()
print(list1)
# []
# 数值统计
# sum:对列表中元素求和
# max:求列表中元素的最大值
# min:求列表中元素的最小值
# 这几种方法只适用于操作对象全是数字列表(列表中元素全是数字)
num_list = [1, 2, 3, 4, 5]
print(sum(num_list))
print(max(num_list))
print(min(num_list))
# 15 5 1
# 统计次数
# count:统计某个元素出现的次数
list3 = [2, 5, 1, 7, 0,2]
print(list3.count(2))
print(list3.count(9))
# 2 0
# 排序方法
# reverse:将列表倒序,直接对列表本身修改
num_list = [1, 2, 3, 4, 5]
num_list.reverse()
print(num_list)
# [5, 4, 3, 2, 1]
# sort: 默认升序排序,修改列表本身。如果reverse=True,则变为降序排序。
list2 = [2, 5, 1, 7, 0]
list2.sort()
list2.sort(reverse=True)
print(list2)
# [7, 5, 2, 1, 0]
# sorted:默认升序排序,如果reverse=True,降序排序
list3 = [2, 5, 1, 7, 0]
print(sorted(list3), list3)
print(sorted(list3, reverse=True), list3)
# [0, 1, 2, 5, 7]
[7, 5, 2, 1, 0]
5.列表的推导式
-
列表推导式又称列表生成式,有三种语法表达形式:
- 语法一、[表达式 for 变量 in 容器]
- 语法二、[符合条件的表达式 for 变量 in 容器 if 条件]
- 语法三、[表达式 for 变量1 in 容器1 for 变量2 in 容器2]
- 这三种语法最后生成的都是列表
-
三种语法表达形式的用法:
# 语法一实现将100以内5的倍数添加到列表中 list1 = [i for i in range(0, 101, 5)] print(list1) # 用语法二来实现 list4 = [i for i in range(101) if i % 5 == 0] print(list4) # 使用语法三随机生成5个人的三科成绩 import random score = [ [random.randint(0, 100) for _ in range(3)] for _ in range(5)] print(score)