01-序列
- 基本概念
- 序列是一种数据结构
- 数据结构指计算机中存储数据的方式
- 分类
- 可变序列 list
- 不可变序列 str 、tuple
02-列表list
# 创建空列表
list0 = []
list1 = [1, 2, 3, 4]
list2 = [1, 'abc', [], None, True]
print(list2, type(list2))
# 运行结果[1, 'abc', [], None, True] <class 'list'>
03-列表的切片
str[起始索引位置:结束索引位置:步长]
list1 = ['张三', '李四', '王五', '小明', '猫叔']
print(list1[1: 4])
# 运行结果 ['李四', '王五', '小明']
# 根据索引号来取
print(list1[2])
# 运行结果 王五
print(list1[2][-1])
# 运行结果 五
print(list1[::0])
# 运行结果 ValueError: slice step cannot be zero
print(list1[::3])
# 运行结果 ['张三', '小明']
print(list1[1::6])
# 运行结果 ['李四']
print(list1[:2:6])
# 运行结果 ['张三']
04-通用操作
# 加法
a = [1, 2, 3] + [3, 4, 5]
print(a)
# 运行结果 [1, 2, 3, 3, 4, 5]
# 乘法
a = [1, 2, 3] * 2
# in 和 not in 检测是否在里面
list1 = ['张三', '李四', '王五', '小明', '猫叔']
print('张三' in list1)
# 运行结果 True
# len()、 max()、 min()
print(len(list1))
# 运行结果 5
# list.index(x[,start[,end]])
print(list1.index('李四'))
# 运行结果 1
# list.count(x)统计元素出现个数
05-修改列表
- 通过切片修改
list1 = ['张三', '李四', '王五', '小明', '猫叔']
list1[1] = 'a'
print(list1)
# 运行结果 ['张三', 'a', '王五', '小明', '猫叔']
list1[4::] = 'abc'
print(list1)
# 运行结果 ['张三', '李四', '王五', '小明', 'a', 'b', 'c']
list1[4::] = 123
# 运行结果 TypeError: can only assign an iterable
list1[0:0] = "123"
print(list1)
# 运行结果 ['1', '2', '3', '张三', '李四', '王五', '小明', '猫叔']
# 删除功能
del list1[3]
- 设置了步长,序列中的元素个数必须和切片中的个数保持一致
list1[::2] = 'abc'
print(list1)
# 运行结果 ['a', '李四', 'b', '小明', 'c']
list1[::2] = 'abcd'
# 运行结果 ValueError: attempt to assign sequence of size 4 to extended slice of size 3
- 通过切片删除元素
list1[2:] = []
print(list1)
# 运行结果 ['张三', '李四']
06-列表中的修改方法
增加方法
# list.append() 末尾添加
list1.insert(4, "猪")
print(list1)
# 运行结果 ['张三', '李四', '王五', '小明', '猪', '猫叔']
list1.extend(['猫', '狗'])
print(list1)
# 运行结果 ['张三', '李四', '王五', '小明', '猪', '猫叔', '猫', '狗']
删除方法
# list.pop()根据索引删除,并返回删除的元素
list1 = ['张三', '李四', '王五', '小明', '猫叔']
res = list1.pop(3)
print(res)
print(list1)
# 运行结果
# 小明
# ['张三', '李四', '王五', '猫叔']
list1 = ['张三', '李四', '王五', '小明', '猫叔']
list1.remove('张三')
print(list1)
# 运行结果 ['李四', '王五', '小明', '猫叔']
清空列表 list.clear()
反转列表 list.reverse()
排序列表 list.sort()升序 list.sort(reverse=True)降序
07-for循环和range函数
list1 = ['张三', '李四', '王五', '小明', '猫叔']
for i in list1:
print(i)
# range(开始数据, 结束数据, 步长)
print(list(range(9)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8]
for i in range(1,11)
print(i)
作业
- 现在有 a = [1,2,3,4,5,6] 用多重方式实现列表的反转([6,5,4,3,2,1])并写出推导过程
a = [1, 2, 3, 4, 5, 6]
b = []
# 方法1 步长切片操作
b = a[::-1]
print(b)
# 方法2 头部切片修改
for i in a:
b[0:0] = [i]
print(b)
# 方法3 头部插入
for i in a:
b.insert(0, i)
print(b)
# 方法4 反转列表
a.reverse()
print(a)
# 方法5 尾部添加
for i in range(1, len(a)+1):
b.append(a[-i])
print(b)
- 给用户9次机会 猜1-10个数字随机来猜数字。如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。最终结果要求用户怎么也猜不对
# 取一个1-10的区间
list1 = []
for i in range(1, 11):
list1.append(i)
# 定义一个猜数字函数
def guess():
# 请用户输入一个数字
a = int(input('请猜一个{}内的数字'.format(list1)))
# 判断用户输入是否合法
if a in list1:
list1.remove(a)
else:
print('你输入不合法')
# 猜9次
while len(list1) > 1:
guess()
else:
print('正确是数是{}'.format(list1[0]))
运行结果
- 有两个列表 lst1 = [11,22,33] lst2 = [22,33,44] 获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
# 遍历lst1
for i in lst1:
# 判断是否在lst2中有这个元素
while i in lst2:
print(i)
break
运行结果
- 现有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中
import random
# 定义8位老师用1-8数字代替
teacher = []
for i in range(1, 9):
teacher.append(i)
# 随机排序
random.shuffle(teacher)
# 随机选2个索引
index1 = random.randint(1, 8)
index2 = random.randint(1, 8)
# 比较索引大小
a = min(index1, index2)
b = max(index1, index2)
# 切片分配
print('1教室的老师是{}'.format(teacher[:a]))
print('2教室的老师是{}'.format(teacher[a:b]))
print('3教室的老师是{}'.format(teacher[b:]))
运行结果
- 要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
- 用户名长度6-20,用户名必须以字母开头
- 密码长度至少6位,不能为纯数字,不能有空格
# 定义一个空列表放帐号密码
lst = ["帐号", "密码"]
# 定义用户名函数
def name():
# 键盘输入用户名
a = input("请输入用户名")
# 判断长度
if 6 <= len(a) <= 20:
# 判断字母开头
if a[0].isalpha():
# 在空列表里插入正确帐号
lst.insert(1, a)
# 运行密码自定义函数
password()
else:
print('首位要是字母')
name()
else:
print('请输入长度在6到20之间')
name()
# 定义密码函数
def password():
# 键盘输入密码
a = input("请输入密码")
# 判断长度
if len(a) >= 6:
# 判断纯数字
if not a.isdigit():
# 判断没有空格
if ' ' not in a:
# 在空列表里插入密码
lst.append(a)
else:
print('密码不能有空格')
password()
else:
print('密码不能为纯数字')
password()
else:
print("长度要大于6")
password()
name()
print(lst)
运行结果