列表是list来表示、列表是一个容器可以装任何数据类型的数据
表达式:list = []
1、定义列表
第一种方法
list1 = ['放牛娃','dcs8','test',111,888,9]
print(list1) # ['放牛娃', 'dcs8', 'test', 111, 888, 9]
print(type(list1)) # 数据类型为列表:<class 'list'>
第二种方法
test = 'hello放牛娃'
list2 = list(test)
print(list2) # ['h', 'e', 'l', 'l', 'o', '放', '牛', '娃']
print(type(list2)) # 数据类型为列表:<class 'list'>
2、列表当中常用的函数和用法
my_list = ["aa","bb","cc","aa"]
a = len(my_list) # 统计列表长度
print(a) # 4
b = my_list.count("aa") # 统计 某个元素出现的个数
print(b) # 2
print("aa" in my_list) # True
2.1、索引赋值
test = 'hello'
list2 = list(test)
list2[0] = 'dcs8' # 把dcs8这个字符串赋值给到list2这个列表索引为0的地方
print(list2) # ['dcs8', 'e', 'l', 'l', 'o']
print(type(list2)) # <class 'list'>
2.2、切片赋值
test = 'hello'
list2 = list(test) # ['h', 'e', 'l', 'l', 'o']
list2[3:] = list('dcs')
print(list2) # ['h', 'e', 'l', 'd', 'c', 's']
2.3、append函数 ==》可以在列表的后面添加任意数据类型的数据
list1 = ['test','dcs8',888,99,1]
list1.append('duoceshi')
print(list1) # ['test', 'dcs8', 888, 99, 1, 'duoceshi']
list1.append(222)
print(list1) # ['test', 'dcs8', 888, 99, 1, 'duoceshi', 222]
list1.append(["aa","bb"])
print(list1) # ['test', 'dcs8', 888, 99, 1, 'duoceshi', 222, ['aa', 'bb']]
2.4、extend函数 两个列表拼接
list1 = ['test','dcs8',888,99,1]
list1.extend("xiaoming")
print(list1) # ['test', 'dcs8', 888, 99, 1, 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g']
list2 = ['duoceshi']
list1.extend(list2)
print(list1) # ['test', 'dcs8', 888, 99, 1, 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g', 'duoceshi']
2.5、insert函数 索引位插入值
list1 = ['test','dcs8',888,99,1]
list1.insert(0,'china')
print(list1) # ['china', 'test', 'dcs8', 888, 99, 1]
2.6、index函数 ==》查看字符对应的索引值
list1 = ['test','dcs8',888,99,1]
print(list1.index('test')) # 结果为:0
2.7、remove函数 ==》删除列表中对应的字符
list1 = ['test','dcs8',888,99,1,'dcs8']
list1.remove('dcs8')
print(list1) # ['test', 888, 99, 1, 'dcs8']
# 注意:如果列表中有多个相同的元素,会删除前面那个
2.8、del 通过索引和切片删除值
list1 = ['test','dcs8',888,99,1]
del list1[-1]
print(list1) # ['test', 'dcs8', 888, 99]
del list1[1:]
print(list1) # ['test']
2.9、sort函数 ==》从小到大进行排序
list1 = [888,99,1,12,87,111]
list1.sort()
print(list1) # [1, 12, 87, 99, 111, 888]
list1.sort(reverse=True) # [888, 111, 99, 87, 12, 1]
print(list1)
# 如果列表当中都是字符串就通过ASCII码进行排序、字符串和整型不能一起进行排序
list1 = ['test','99','1','china','dcs8','AB']
list1.sort()
print(list1) # ['1', '99', 'AB', 'china', 'dcs8', 'test']
2.10、sorted函数 排序
list1 = [888,99,1,12,87,111]
print(sorted(list1,reverse=True)) # 降序排序 [888, 111, 99, 87, 12, 1]
print(sorted(list1,reverse=False)) # 升序排序 [1, 12, 87, 99, 111, 888]
2.11、reverse函数 ==》反转(重点)
list1 = [888,99,1,12,87,111]
list1.reverse()
print(list1) # [111, 87, 12, 1, 99, 888]
2.12、pop函数 删除
list1 = [888,99,1,12,87,111]
print(list1.pop()) # 111 打印出被删除的这个值、默认删除列表当中最后的一个值
print(list1) # [888, 99, 1, 12, 87] 打印出删除之后剩余的值
print(list1.pop(0)) # 888 打印出删除对应的索引位的值
print(list1) # [99, 1, 12, 87] 打印出删除之后剩余的值
列表嵌套
name_list = [['TOM', 'Lily', 'Rose'], ['张三', '李四', '王五'], ['xiaohong', 'xiaoming', 'xiaolv']]
# print(name_list)
# 列表嵌套的时候的数据查询
print(name_list[0]) # ['TOM', 'Lily', 'Rose']
print(name_list[0][1]) # Lily
# 需求:8位老师,3个办公室, 将8位老师随机分配到3个办公室 步骤: 1. 准备数据 1.1 8位老师 -- 列表 1.2 3个办公室 - 列表嵌套 2. 分配老师到办公室 *** 随机分配 就是把老师的名字写入到办公室列表 -- 办公室列表追加老师名字数据 3. 验证是否分配成功 打印办公室详细信息:每个办公室的人数和对应的老师名字
import random
# 1. 准备数据
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
offices = [[], [], []]
# 2. 分配老师到办公室 -- 取到每个老师放到办公室列表 -- 遍历老师列表数据
for name in teachers:
# 列表追加数据 -- append(选中) extend insert
# xx[0] -- 不能指定是具体某个下标 -- 随机
num = random.randint(0, 2)
offices[num].append(name)
# print(num)
# print(offices)
# 为了更贴合生活,把各个办公室子列表加一个办公室编号 1, 2, 3
i = 1
# 3. 验证是否分配成功
for office in offices:
# 打印办公室人数 -- 子列表数据的个数 len()
print(f'办公室{i}的人数是{len(office)},老师分别是:')
# 打印老师的名字
# print() -- 每个子列表里面的名字个数不一定 -- 遍历 -- 子列表
for name in office:
print(name)
i += 1
列表推导式
列表变量名 = [x for x in range(开始值,结束值,步长)] 列表变量名 = [x for x in range(开始值,结束值,步长) if 条件]
list1 = [x for x in range(0, 10)]
print(list1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [x for x in range(0, 100)]
print(list1) # [0, 1, 2, 3, 4,.....,99]
list1 = [x for x in range(5, 20, 3)]
print(list1) # [5, 8, 11, 14, 17]
list1 = [x for x in range(30, 20, -1)]
print(list1) # [30, 29, 28, 27, 26, 25, 24, 23, 22, 21]
list1 = [x for x in range(6, -10, -2)]
print(list1) # [6, 4, 2, 0, -2, -4, -6, -8]
list1 = [x for x in range(0, 10) if x % 2 == 0]
print(list1) # [0, 2, 4, 6, 8]
练习:列表推导式输出0-100中10的倍数
a = [x for x in range(1,101) if x % 10 == 0]
print(a) # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
vec = [-4, -2, 0, 2, 4]
# 新生成一个列表,该列表中的每个元素是vec列表中每个元素的2倍
a = [x*2 for x in vec]
print(a) # [-8, -4, 0, 4, 8]
# 利用if语句对列表进行过滤,将小于0的元素过滤掉
a = [x for x in vec if x >= 0]
print(a) # [0, 2, 4]
# 对列表中每个元素应用函数,比如使用abs()函数对每个元素取绝对值
a = [abs(x) for x in vec]
print(a) # [4, 2, 0, 2, 4]
# 对列表中每个元素调用方法
freshfruit = [' banana', 'loganberry ', 'passion fruit ']
a = [weapon.strip() for weapon in freshfruit]
print(a) # ['banana', 'loganberry', 'passion fruit']
# 创建一个元素由元祖组成的列表,形式为(数字x,数字x的平方)
a = [(x, x**2) for x in range(6)]
print(a) # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
# 创建一个元素由列表组成的列表,形式为[数字x,数字x的平方]
a = [[x,x**2] for x in range(6)]
print(a) # [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25]]
# 利用两个for循环将一个嵌套二维列表降为一维列表
vec = [[1,2,3], [4,5,6], [7,8,9]]
a = [num for elem in vec for num in elem]
print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
嵌套列表推导式
for循环
a = []
for i in range(4):
a.append([row[i] for row in matrix])
print(a) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
使用嵌套列表推导式:
a = [[row[i] for row in matrix] for i in range(4)]
print(a) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
字典推导式
# 创建字典 key是1-5的数字,v是这个数字的平方
# dict1 = {k: v for i in range(1, 5)}
dict1 = {i: i**2 for i in range(1, 5)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16}
两个列表合并
list1 = ['name', 'age', 'gender', 'id']
list2 = ['Tom', 20, 'man']
dict1 = {list1[i]: list2[i] for i in range(len(list2))}
print(dict1) # {'name': 'Tom', 'age': 20, 'gender': 'man'}
# 总结:
# 1. 如果两个列表数据个数相同,len统计任何一个列表的长度都可以
# 2. 如果两个列表数据个数不同,len统计数据多的列表数据个数会报错;len统计数据少的列表数据个数不会报错
提取字典中的目标数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
# 1. 需求:提取电脑台数大于等于200
# 获取所有键值对数据,判断v值大于等于200 返回 字典
# print(counts.items())
dict1 = {key: value for key, value in counts.items() if value >= 200}
print(dict1) # {'MBP': 268, 'DELL': 201}
集合推导式
list1 = [1, 1, 2]
set1 = {i ** 2 for i in list1}
print(set1) # {1, 4}
# 集合有去重功能所以这个集合数据只有两个数据分别是1, 4