列表
1. 列表的格式
[数据1,数据2,数据3...]
2. 列表的作用
# 一次性存储多个数据,且可以为不同数据类型
# 程序员可以对这些数据进行的操作有:增、删、改、查
3. 列表的常见操作
3.1 查找
3.1.1 下标
# 下标
name_list = ['Lisa', 'Eileen', 'Mary']
print(name_list)
print(name_list[0]) # Lisa
print(name_list[2]) # Mary
3.1.2 函数
# 1. index() 返回指定数据所在的下标
# 语法 列表序列.index(数据,开始位置下标,结束位置下标)
name_list = ['Tom', 'Lisa', 'Ling']
# print(name_list.index('Lisa', 0, 2)) # 1
# 如果查找的数据不存在,则报错
# 2. count() 统计指定数据在当前列表中出现的次数
# print(name_list.count('Lisa')) # 1
# print(name_list.count('Lisas')) # 0
# 3. len() 访问列表长度,即列表中数据的个数
print(len(name_list)) # 3
3.1.3 判断是否存在
name_list = ['Tom', 'Lisa', 'Rose']
# 1. in (公共操作:可在多个地方,如元组、列表中使用)
# print('Tom' in name_list) # True
# print('Toms' in name_list) # False
# 2. not in (公共操作:可在多个地方,如元组、列表中使用)
# print('Tom' not in name_list) # False
# print('Toms' not in name_list) # True
# 3.体验案例
name_list = ['Tom', 'Lisa', 'Rose']
# 需求:注册邮箱,用户输入一个账号名,判断这个账号名是否在已有注册用户的列表里,有人注册,则重新输入账号名
"""
1.用户输入一个账号
2.判断 if...else
"""
name = input('请输入您的账号名:')
if name in name_list:
# 提示用户名已经存在
print(f'您输入的名字是{name},您输入的账号名已经存在,请重新输入')
else:
# 提示可以注册
print(f'您输入的名字是{name},您输入的账号名可以注册')
3.2 增加
3.2.1 append()
# 1. append()
# 语法 序列.append()
name_list = ['Tom', 'Lisa', 'Rose']
# name_list.append('xiaoming')
# print(name_list)
# name_list.append([11, 22]) # ['Tom', 'Lisa', 'Rose', [11, 22]]
# print(name_list)
# 1.列表数据是可改的 --- 列表是可变类型
# 2. append追加数据时,如果数据是一个序列,把它追加到列表的结尾
3.2.2 extend()
extend()
列表结尾追加数据,如果数据是一个序列,则将它逐一添加到列表。
- 语法
列表序列.extend(数据)
- 体验
name_list = ['Tom', 'Lisa', 'Rose']
# name_list.extend('xiaoming')
# print(name_list) # 结果为['Tom', 'Lisa', 'Rose', 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g']
name_list.extend(['xiaoming', 'xiaowang'])
print(name_list) # 结果为['Tom', 'Lisa', 'Rose', 'xiaoming', 'xiaowang']
# extend 追加数据是一个序列,把数据里面的数据拆开,再逐一添加到列表结尾
3.2.3 insert()
insert() 指定位置新增数据
- 语法
列表序列.insert(位置下标,数据)
# 位置下标,即 你要添加数据的位置
- 体验
name_list = ['Tom', 'Lisa', 'Rose']
# name_list.insert(下标,数据)
name_list.insert(1, 'aaa')
print(name_list) # 结果为['Tom', 'aaa', 'Lisa', 'Rose']
3.3 删除
name_list = ['Tom', 'Lisa', 'Rose']
# 1.del
# del name_list # 第一种写法
# del(name_list) # 第二种写法
# print(name_list)
# del 可以删除指定下标的数据
# del name_list[0]
# print(name_list) # 结果为 ['Lisa', 'Rose']
# 2.pop() -- 删除指定下标的数据,如果不指定下标,默认删除最后一个数据
# 无论删下标数据还是删最后一个数据,pop函数都会返回这个被删除的数据
# del_name = name_list.pop()
# del_name = name_list.pop(1)
# print(del_name) # 结果为 Rose
# print(name_list) # 结果为 ['Tom', 'Lisa']
# del_name = name_list.pop(1)
# print(del_name) # 结果为 Lisa
# print(name_list) # 结果为 ['Tom', 'Rose']
# 3.remove(数据)
# name_list.remove('Tom')
# print(name_list)
# 4.clear() --- 清空列表
# name_list.clear()
# print(name_list) # 结果为 []
3.4 修改
3.4.1 修改指定下标的数据
name_list = ['Tom', 'Lisa', 'Rose']
name_list[0] = 'aaa'
print(name_list) # 结果为['aaa', 'Lisa', 'Rose']
3.4.2 逆置 reverse()
list1 = [1, 2, 3, 4, 5, 6]
list1.reverse()
print(list1) # 结果 [6, 5, 4, 3, 2, 1]
3.4.3 sort () 排序(升序+降序)
- 语法
列表序列.sort(key=None, reverse = False)
# reverse 表示排序规则
# reverse = True (降序)
# reverse = False (升序,默认)
- 体验
list1 = [1, 2, 3, 4, 5, 6]
list1.sort()
print(list1) # 结果 [1, 2, 3, 4, 5, 6] 默认为升序
3.5 复制
# 函数 copy()
name_list = ['Tom', 'Lisa', 'Rose']
list1 = name_list.copy()
print(list1)
print(name_list)
4. 列表的循环遍历
需求:依次打印列表中的各个数据
4.1 while
name_list = ['Tom', 'Lisa', 'Rose']
"""
1.准备表示下标数据
2. 循环while
条件 i < 3 len()
遍历:依次按顺序访问到序列的每个数据
i += 1
"""
i = 0
while i < len(name_list):
print(name_list[i]) # 结果为打印 一竖排 名字
i += 1
4.2 for (比while简洁,优选)
name_list = ['Tom', 'Lisa', 'Rose']
for i in name_list:
# 遍历序列中的数据
print(i)
5.列表嵌套
name_list = [['xaiohong', 'xiaoming', 'xiaoya'], ['Tom', 'Lisa', 'Rose'], ['李一', '李二', '李三']]
print(name_list)
# 列表嵌套时的数据查询
# print(name_list[0]) # 结果为 ['xaiohong', 'xiaoming', 'xiaoya']
print(name_list[0][1]) # 结果为 xiaoming
6. 综合应用
# 随机分配办公室
# 需求: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)
# 3. 验证是否分配成功
i = 1
# 为更贴近生活,把每个办公室加一个编号
for office in offices:
# 打印办公室的人数 --- 子列表数据的个数 -- len()
print(f'办公室{i}的人数是{len(office)}, 老师分别是:')
# 打印老师的名字
# print() -- 每个子列表中的名字个数不一定 -- 遍历 -- 子列表
for name in office:
print(name)
i += 1