在职前端Leader学习/转行 AI Agent -DAY3

2026.7.11 13:13

学习路线

rust 复制代码
Python -> Python进阶 -> Python数据分析 -> LangChain -> 机器学习 -> 神经网络 -> NLP -> Coze -> Dify -> 大模型应用基础 -> 大模型微调 -> 多模态 -> vibeCoding

Python 学习

60. 列表_定义列表

python 复制代码
# 定义有内容的列表
# list = [34, 56, 21, 56, 11]  # 不能改原有函数
list1 = [34, 56, 21, 56, 11]
list2 = ['北京', '尚硅谷', '你好啊']
list3 = [23, '尚硅谷', True, None]
list4 = [23, '尚硅谷', True, None, [100, 200, 300]]
print(list1, type(list1))
print(list2, type(list2))
print(list3, type(list3))
print(list4, type(list4))

# 定义空列表(列表中的数据,后期会通过特定写法填充)
list5 = []
list6 = list()
print(list5, type(list5))
print(list6, type(list6))

61. 列表_下标(索引值)

python 复制代码
# 定义一个列表
nums = [10, 20, 30, 40, 50]

# 测试正索引
print(nums[0])
print(nums[1])
print(nums[2])
print(nums[3])
print(nums[4])

# 测试负索引
print(nums[-1])
print(nums[-2])
print(nums[-3])
print(nums[-4])
print(nums[-5])

# 测试错误索引
# print(nums[5])  # 错误

# 定义一个嵌套列表
nums = [10, 20, ['你好啊', '尚硅谷'], 40, 50]
# 去除"尚硅谷"
print([nums[2]])
print([nums[2][1]])

62. 列表_增删改查

python 复制代码
# 新增操作
# 方法一: 通过列表的append方法,在列表尾部加一个元素
from unittest import result

nums = [10, 20, 30, 40]
nums.append(50)
print(nums)

# 方式二: 通过列表的insert方法,在列表的指定下标出添加一个元素
nums = [10, 20, 30, 40]
nums.insert(2, 666)
print(nums)

# 方式三: 通过列表的extend方法,将可迭代对象中的内容依次取出,追加到列表尾部
nums = [10, 20, 30, 40]
nums.extend('尚硅谷')
print(nums)  # [10, 20, 30, 40, '尚', '硅', '谷']
nums.extend(range(1, 4))
print(nums)  # [10, 20, 30, 40, '尚', '硅', '谷', 1, 2, 3]
x = nums.extend([70, 80, 90])
print(nums)  # [10, 20, 30, 40, '尚', '硅', '谷', 1, 2, 3, 70, 80, 90]
print(x)  # None

# 删除操作
# 方式一: 通过列表的pop方法,删除指定位置的元素,并返回该元素
nums = [10, 20, 10, 40, 50]
result = nums.pop(1)
print(nums)  # [10, 10, 40, 50]
print(result)  # 20

# 方式二: 通过列表的remove方法,删除列表中第一次出现的指定值
nums = [10, 20, 10, 40, 50]
nums.remove(10)
print(nums)  # [20, 10, 40, 50]

# 方式三: 通过列表的clear方法,删除列表中的所有元素(清空列表)
nums = [10, 20, 10, 40, 50]
nums.clear()
print(nums)  # []

# 方式四: 通过del关键字,删除指定元素
nums = [10, 20, 10, 40, 50]
del nums[3]
print(nums)  # [10, 20, 10, 50]

# 修改操作
nums = [10, 20, 10, 40, 50]
nums[2] = 66
print(nums)  # [10, 20, 66, 40, 50]

# 查询操作
nums = [10, 20, 10, 40, 50]
print(nums[3])  # 40

63. 列表_常用方法

python 复制代码
# 1. 使用 index 方法,查找指定元素在列表中第一次出现的下标,返回值是: 元素下标
fruits = ['香蕉', '苹果', '橙子', '香蕉']
result = fruits.index('香蕉')
print(result)  # 0
result = fruits.index('苹果')
print(result)  # 1
# result = fruits.index('草莓')  # 运行报错
# print(result)
fruits = ['香蕉', '苹果', '橙子', '香蕉', ['草莓', '菠萝']]
# result = fruits.index('草莓')  # 运行报错,不会往下查找
# print(result)

# 2. 使用 count 方法,统计某个元素在列表中的出现的次数,返回值是: 元素出现的次数
nums = [10, 20, 10, 30, 10, 40]
result = nums.count(10)
print(result)  # 3
result = nums.count(66)
print(result)  # 0
nums = [10, 20, 10, 30, 10, 40, [10, 10, 10]]
result = nums.count(10)
print(result)  # 3,不往下查找

# 3. 使用 reverse 方法,对列表进行反转(会改变原列表)
nums = [23, 11, 32, 30, 17]
nums.reverse()
print(nums)  # [17, 30, 32, 11, 23]
nums = [23, 11, 32, 30, 17, [6, 7, 8, 9]]
nums.reverse()
print(nums)  # [[6, 7, 8, 9], 17, 30, 32, 11, 23,不往下反转

# 4. 使用 sort 方法,队列表排序(默认从小到大),若想从大到小,可以将 reverse 参数设为 True
# 4.1 若列表中的元素: 都是数字,则按照数字的大小顺序进行排序
nums = [23, 11, 32, 30, 17]
nums.sort()
print(nums)  # [11, 17, 23, 30, 32]
nums.sort(reverse=True)
print(nums)  # [32, 30, 23, 17, 11]

# 4.2 若列表中的元素: 既有数字,又有字符串,那就会报错
nums = [23, 11, 32, 30, 17, '尚硅谷']
# nums.sort()  # 运行报错
# print(nums)

# 4.3 若列表中的元素: 都是字符串,则按照字符串的 Unicode 编码大小进行排序
msg_list = ['北京', '尚硅谷', '你好']
msg_list.sort()
print(msg_list)  # ['你好', '北京', '尚硅谷']
print(ord('你'), ord('北'), ord('尚'))
msg_list = ['北京', '北硅谷', '北好']
msg_list.sort()
print(msg_list)  # ['北京', '北好', '北硅谷']
print(ord('京'), ord('好'), ord('硅'))

# 备注: 所有的列表方法,都只作用于"当前层"的元素(浅层操作),不糊自动进入嵌套的"里层"结构中

64. 列表_常用内置函数

python 复制代码
# 1. 使用内置的 sorted 函数,返回一个排序后的新容器(不改变原容器,默认顺序: 从小到大)
# 1.1 若列容器中的元素: 都是数字,则按照数字的大小顺序进行排序
nums = [23, 11, 32, 30, 17]
result = sorted(nums)
print(nums)  # [23, 11, 32, 30, 17]
print(result)  # [11, 17, 23, 30, 32]
result = sorted(nums, reverse=True)
print(nums)  # [23, 11, 32, 30, 17]
print(result)  # [32, 30, 23, 17, 11]

# 1.2 若列容器中的元素: 既有数字,又有字符串,那就会报错
nums = [23, 11, 32, 30, 17, '尚硅谷']
# sorted(nums)  # 运行报错

# 1.3 若列容器中的元素: 都是字符串,则按照字符串的 Unicode 编码大小进行排序
msg_list = ['北京', '尚硅谷', '你好']
result = sorted(msg_list)
print(msg_list)  # ['北京', '尚硅谷', '你好']
print(result)  # ['你好', '北京', '尚硅谷']

# 2. 使用内置的 len 函数。获取容器中元素的总数量,返回值是: 元素总数量
nums = [10, 20, 10 ,30, 10, 40]
result = len(nums)
print(result)  # 6
nums = [10, 20, 10 ,30, 10, 40, [50, 60, 70]]
result = len(nums)
print(result)  # 7

# 3. 使用内置的 max 函数,获取容器中的最大值,返回值是: 最大值
# 3.1 若列容器中的元素: 都是数字,那 max 返回的是最大的数
nums = [23, 11, 32, 30, 17]
result = max(nums)
print(nums)
print(result)  # 32

# 3.2 若列容器中的元素: 既有数字又有字符串,那 max 会报错
nums = [23, 11, 32, 30, 17, '尚硅谷']
# result = max(nums)  # 运行报错
# print(result)

# 3.3 若列容器中的元素: 都是字符串,则 max 会返回: Unicode 编码最大的字符
msg_list = ['北京', '尚硅谷', '你好']
result = max(msg_list)
print(msg_list)
print(result)  # '尚硅谷'

# 3.4 max 函数也可以接收多个值,并筛选出最大值
result = max(33, 45, 12, 78, 99)
print(result)  # 99

# 4. 使用内置的 min 函数,获取容器中的最小值,返回值是: 最小值
# 备注: min 函数的使用方式与注意点与 max 函数一样,只不过 min 函数返回的是最小值
nums = [23, 11, 32, 30, 17]
result = min(nums)
print(result)  # 11

# 5. 使用内置的 sum 函数,对容器中的数据进行求和(元素只能是数值)
nums = [10, 20, 30, 40, 50]
result = sum(nums)
print(result)  # 150
nums = [10, 20, 30, 40, 50, '尚硅谷']
# result = sum(nums)  # 运行报错
# print(result)
nums = [10, 20, 30, 40, 50, [60, 70, 80]]
# result = sum(nums)  # 运行报错
# print(result)
msg = '你好啊'
# result = sum(msg)  # 报错
# print(result)
msg = '123456'
# result = sum(msg)  # 报错
# print(result)

65. 列表_循环遍历

python 复制代码
# 定义一个成绩列表
score_list = [62, 50, 60, 48, 80, 20, 95]

# 使用 while 循环遍历列表
index = 0
while index < len(score_list):
    # print(index)
    print(score_list[-index])
    index += 1

# index = 1  # 下标越界
# while index <= len(score_list):
#     print(score_list[index])
#     index += 1

# 自己防止下标越界的方法
index = 1
while index <= len(score_list):
    print(score_list[-index])
    index += 1

# 使用 for 循环遍历列表
for item in score_list:
    print(item)

# 使用 for 循环遍历列表(通过 range 函数 和 len 函数按照索引遍历)
for index in range(len(score_list)):
    # print(index)
    print(score_list[index])

# 使用 for 循环遍历列表(通过 enumerate 函数,同时获取下标(索引值)和元素)
for index, item in enumerate(score_list):
# enumerate 的 start 参数,可以让计数从指定值开始(改变的是循环时的"编号",不是真正的索引值)
# for index, item in enumerate(score_list, start=5):
    print(index, item)
    # print(index, item, score_list[0])
print(enumerate(score_list), type(enumerate(score_list)))  # 自己探索的
print(f'最后的打印{score_list[0]}')

66. 列表_小练习

python 复制代码
# 自己写的版本
def input_score():
    score_list = []
    while True:
        score = input('请输入成绩(输入结束后结束输入): ')
        if score == '结束':
            break
        elif int(score) < 0 or int(score) > 100:
            print('请输入0~100的数字')
        else:
            score_list.append(int(score))
    return score_list

def get_nums(score_list):
    passed_num = 0
    great_num = 0
    for score in score_list:
        if score >= 60:
            passed_num += 1
        if score >= 90:
            great_num += 1
    return [passed_num, great_num]

def get_computed(score_list):
    score_list_len = len(score_list)
    print(f'总人数{score_list_len}')
    print(f'最高分{max(score_list)}')
    print(f'最低分{min(score_list)}')
    computed_get_nums = get_nums(score_list)
    print(f'合格人数{computed_get_nums[0]}')
    print(f'合格率{computed_get_nums[0] / score_list_len}')
    print(f'优秀人数{computed_get_nums[1]}')
    print(f'优秀率{computed_get_nums[1] / score_list_len}')
    print(f'平均分{sum(score_list) / score_list_len}')

def main():
    scores = input_score()
    if scores:
        get_computed(scores)
    else:
        print('请重新输入成绩')
        main()

main()

# 老师写的思路
print('请输入学生成绩,输入"结束"停止录入')
score_list = []

# 持续循环,让用户输入学生成绩
while True:
    data = input('✍请输入成绩: ')
    if data == '结束':
        break
    else:
        score_list.append(int(data))

# 如果 score_list 中有数据,则开始统计
if score_list:
    # print('具体的统计代码')
    # 统计平均分
    avg = sum(score_list) / len(score_list)
    # 合格人数
    pass_count = 0
    # 优秀人数
    excellent_count = 0
    # 遍历列表,开始统计
    for item in score_list:
        if item >= 60:
            pass_count += 1
        elif item >= 90:
            excellent_count += 1
    # 合格率
    pass_rate = pass_count / len(score_list) * 100
    # 优秀率
    excellent_rate = excellent_count / len(score_list) * 100
    # 打印信息
    print('*********👇统计信息如下👇*********')
    print(f'👮总人数为: {len(score_list)}')
    print(f'👆最高分为: {max(score_list)}')
    print(f'👇最低分为: {min(score_list)}')
    print(f'合格人数: {pass_count}人')
    print(f'合格率为: {pass_rate:.1f}%')
    print(f'🏆优秀人数: {excellent_count}人')
    print(f'优秀率为: {excellent_rate:.1f}%')
    print(f'平均分数: {avg:.1f}')
else:
    print('您没有输入任何成绩! ')

67. 列表_小练习

python 复制代码
# 自己写的版本
def input_score():
    score_list = []
    while True:
        score = input('请输入成绩(输入结束后结束输入): ')
        if score == '结束':
            break
        elif int(score) < 0 or int(score) > 100:
            print('请输入0~100的数字')
        else:
            score_list.append(int(score))
    return score_list

def get_nums(score_list):
    passed_num = 0
    great_num = 0
    for score in score_list:
        if score >= 60:
            passed_num += 1
        if score >= 90:
            great_num += 1
    return [passed_num, great_num]

def get_computed(score_list):
    score_list_len = len(score_list)
    print(f'总人数{score_list_len}')
    print(f'最高分{max(score_list)}')
    print(f'最低分{min(score_list)}')
    computed_get_nums = get_nums(score_list)
    print(f'合格人数{computed_get_nums[0]}')
    print(f'合格率{computed_get_nums[0] / score_list_len}')
    print(f'优秀人数{computed_get_nums[1]}')
    print(f'优秀率{computed_get_nums[1] / score_list_len}')
    print(f'平均分{sum(score_list) / score_list_len}')

def main():
    scores = input_score()
    if scores:
        get_computed(scores)
    else:
        print('请重新输入成绩')
        main()

main()

# 老师写的思路
print('请输入学生成绩,输入"结束"停止录入')
score_list = []

# 持续循环,让用户输入学生成绩
while True:
    data = input('✍请输入成绩: ')
    if data == '结束':
        break
    else:
        score_list.append(int(data))

# 如果 score_list 中有数据,则开始统计
if score_list:
    # print('具体的统计代码')
    # 统计平均分
    avg = sum(score_list) / len(score_list)
    # 合格人数
    pass_count = 0
    # 优秀人数
    excellent_count = 0
    # 遍历列表,开始统计
    for item in score_list:
        if item >= 60:
            pass_count += 1
        elif item >= 90:
            excellent_count += 1
    # 合格率
    pass_rate = pass_count / len(score_list) * 100
    # 优秀率
    excellent_rate = excellent_count / len(score_list) * 100
    # 打印信息
    print('*********👇统计信息如下👇*********')
    print(f'👮总人数为: {len(score_list)}')
    print(f'👆最高分为: {max(score_list)}')
    print(f'👇最低分为: {min(score_list)}')
    print(f'合格人数: {pass_count}人')
    print(f'合格率为: {pass_rate:.1f}%')
    print(f'🏆优秀人数: {excellent_count}人')
    print(f'优秀率为: {excellent_rate:.1f}%')
    print(f'平均分数: {avg:.1f}')
else:
    print('您没有输入任何成绩! ')

68. 元组

python 复制代码
# 定义元组
from unittest import result

t1 = (28, 67, 21, 67, 11)
t2 = ('北京', '尚硅谷', '你好')
t3 = (100, True, '你好', None)
t4 = (100, True, '你好', None, (50, 60, 70))
print(type(t1), t1)
print(type(t2), t2)
print(type(t3), t3)
print(type(t4), t4)

# 元组的下标
t1 = (28, 67, 21, 67, 11)
print(t1[3])
print(t1[-1])

# 元组中的元素,不可修改
# t1[0] = 100  # 报错

# 元组中的元素。不可修改,但元组中如果存放了可变类型(列表),那可变类型中的内容仍可修改
t2= (28, 67, 21, 67, 11, [100, 200, 300, ('你好', '尚硅谷')])
# t2[5] = 400  # 报错
t2[5][2] = 400
print(t2)
# t2[5][3][0] = 'hello'  # 运行报错

# 定义空元组
t1 = ()
t2 = tuple()
print(type(t1), t1)
print(type(t2), t2)

# 定义只有一个元素的元组
# t1 = ('你好')  # 报错
t1 = (
    '你好',
    '尚硅谷'
)
print(type(t1), t1)  # 你好尚硅谷  不是元组是字符串
t1 = ('你好',)
t2 = (18,)
print(type(t1), t1)  # 是元组
print(type(t2), t2)  # 是元组

# 常用方法
# index 方法: 获取指定元素在元组中第一次出现的下标
t1 = (28, 67, 21, 67, 11)
result = t1.index(67)
print(result)  # 1

# count 方法: 统计指定元素在元组中出现的次数
t1 = (28, 67, 21, 67, 11)
result = t1.count(67)
print(result)  # 2

# 常用内置函数
# max 函数,返回元组中的最大值
t1 = (23, 11, 32, 30, 17)
result = max(t1)
print(result)  # 32

# min 函数,返回元组中的最小值
t1 = (23, 11, 32, 30, 17)
result = min(t1)
print(result)  # 11

# len 函数,返回元组中元素的个数(元组长度)
t1 = (23, 11, 32, 30, 17)
result = len(t1)
print(result)  # 5

# sorted 函数,对元组进行排序(不修改原元组,返回一个新的列表)
t1 = (23, 11, 32, 30, 17)
result = sorted(t1)
print(result)  # [11, 17, 23, 30, 32]
result = sorted(t1, reverse=True)
print(result)  # 列表 [32, 30, 23, 17, 11]
print(tuple(result))  # 元组 (32, 30, 23, 17, 11)

# sum 函数,统计元组中所有元素的和(元素必须是纯数字)
t1 = (23, 11, 32, 30, 17)
result = sum(t1)
print(result)  # 113

# 实际开发中的元组,不一定是我们自己定义的,比如函数的可变参数*args就是一个元组
def demo(*args):
    # print(args)
    return sum(args)
# demo(100, 200, 300)
result = demo(100, 200, 300)
print(result)  # 600

# 元组的循环遍历
t1 = (23, 11, 32, 30, 17)

# while 循环遍历
index = 0
while index < len(t1):
    print(t1[index])
    index += 1

# for 循环遍历
for item in t1:
    print(item)

69. 函数_解包列表或元组传参

python 复制代码
# def test(data):
# def test(a, b, c, d):
# 定义函数时,使用*args(变量不一定非要用args,比如写: *data也可以),将收到的多个参数,打包成一个元组
def test(*args):
    # print(f'我是test函数,我收到的参数是: {data}')
    # print(f'我是test函数,我收到的参数是: {a}、{b}、{c}、{d}')
    print(f'我是test函数,我收到的参数是: {args},参数类型是: {type(args)}')
list1 = [100, 200, 300, 400]
tuple1 = ('你好', '北京', '尚硅谷')

# 函数调用时,正常传递: 列表 或 元组
# test(list1)
# test(tuple1)

# 函数调用时,使用*队: 列表 或 元组进行解包后,再传递参数
test(*list1)  # 此种写法相当于: test(100, 200, 300, 400)  报错,入参过多
test(*tuple1)  # 此种写法相当于: test('你好', '北京', '尚硅谷')  报错,入参过少

70. 函数_综合案例(优化版)

python 复制代码
def calc_total(*nums):
# def calc_total(nums):
    """
    计算总运动量(个)
    :param nums: 每一天的运动量(可变参数)
    :return: 总运动量(个)
    """
    return sum(nums)

def calc_avg(total, days=7):
    """
    计算平均值
    :param total: 总运动量(个)
    :param days: 天数(默认值是7)
    :return: 平均值
    """
    return total / days

def check_success(total, goal=120):
    """
    挑战本次挑战是否成功
    :param total: 总运动量
    :param goal: 成功数量(默认值是120)
    :return: 成功或失败的具体信息
    """
    if total >= goal:
        return '恭喜! 挑战成功! '
    else:
        return '抱歉! 挑战失败! '

# def main(title, duration):
def main(title, duration, goal):
    """
    主函数,用于开始一场挑战赛
    :param title: 比赛标题
    :param duration: 比赛持续天数
    :param goal: 目标运动量
    :return: None
    """
    print(f'【{title}】【{duration}天】👊挑战赛(请输入每天的数量)')
    # num1 = int(input('第1天: '))
    # num2 = int(input('第2天: '))
    # num3 = int(input('第3天: '))
    # 定义一个nums列表,用于存储每天的健身数据
    nums = []
    # 根据 duration 的值,循环让用户输入
    for index in range(duration):
        nums.append(int(input(f'请输入第{index + 1}天的数据: ')))

    # 计算总数
    # total = calc_total(num1, num2, num3)
    # total = calc_total(nums)
    total = calc_total(*nums)
    # 计算平均值
    avg = calc_avg(total, duration)
    # 判断挑战是否成功
    result = check_success(total, 30)
    # 打印相关信息
    print(f'【{title}】【{duration}天】健身总结')
    print(f'总数: {total},平均值: {avg:.1f}')
    print(result)

main('俯卧撑', 3, 40)

71. 字符串(数据容器角度)

python 复制代码
# 字符串的下标
from unittest import result

msg = 'welcome to atguigu'
print(msg[3])
print(msg[-1])

# 字符串中的字符,不可修改
msg = 'welcome to atguigu'
# msg[0] = 'a'  # 报错

# 字符串不能嵌套
# msg = 'welcome to 'hello' atguigu'
msg = 'welcome to "hello" atguigu'
print(msg[11])  # 11
msg = 'welcome to 'hello' atguigu'

# 常用方法
# index 方法: 获取指定字符,在字符串中第一次出现的下标
msg = 'welcom to atguigu'
result = msg.index('t')
print(result)  # 8

# split 方法: 将字符串按照指定字符进行分隔,并将分隔后的内容存入一个列表
msg = '尚硅谷@atguigu@你好'
result = msg.index('@')
print(msg)  # '尚硅谷@atguigu@你好'
print(result)  # ['尚硅谷', 'atguigu'. '你好']
result = msg.index('x')
print(result)  # ['尚硅谷@atguigu@你好']
msg = 'welcome to atguigu'
result = msg.index(' ')
print(result)  # ['welcome', 'to', 'atguigu']

# replace 方法: 将字符串中的某个字符片段,替换成目标字符串(不修改原字符串,返回新字符串)
msg = 'welcome to atguigu'
result = msg.replace('g', 'G')
print(msg)  # welcome to atguigu
print(result)  # welcome to atGuiGu
result = msg.replace('atguigu', '尚硅谷')
print(result)  # welcome to 尚硅谷

# count 方法: 统计指定字符,再字符串中出现的次数
msg = 'welcome to atguigu'
result = msg.count('g')
print(result)  # 2

# strip 方法: 从某个字符串中删除: 指定字符串中的任意字符
# 规则: 从字符串两端开始删除,只要遇到i一个不在字符串中的字符就停下
msg = '666尚6硅6谷666'
result = msg.strip('6')
print(msg)  # '666尚6硅6谷666'
print(result)  # '尚6硅6谷

msg = '1234尚12硅34谷4321'
result = msg.strip('1324')
print(msg)  # '1234尚12硅34谷4321'
print(result)  # '尚12硅34谷

msg = '34215尚12硅34谷4132'
result = msg.strip('5432')
print(msg)  # '34215尚12硅34谷4132'
print(result)  # '15尚12硅34谷41

# strip常用
msg = '  尚硅谷  '
result = msg.strip()
print(msg)  # '  尚硅谷  '
print(result)  # '尚硅谷'

# 常用内置函数
# len 函数: 统计字符串中字符串的个数(字符串的长度)
msg = 'welcome to atguigu'
result = len(msg)
print(result)  # 18

# max min sorted 也可以用但是基本没有意义

# 字符串的循环遍历
msg = 'welcome to atguigu'
# while 循环遍历
index = 0
while index < len(msg):
    print(msg[index])
    index += 1

# for 循环遍历
for item in msg:
    print(item)

72. 序列的切片操作

python 复制代码
# 切片不包含结束位置 [开始位置:结束位置:步长]
# 开始位置: 默认0
# 结束位置: 默认序列长度
# 步长: 默认1,如果为n,就是间隔n - 1个取元素
# 开始位置>结束位置,步长必须是负数

# 对列表进行切片
list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[0:5:1]
print(list2)  # [10, 20, 30, 40, 50]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[1:8:2]
print(list2)  # [20, 40, 60, 80]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[1:8:3]
print(list2)  # [20, 50, 80]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[0:10:1]
print(list2)  # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[::]
print(list2)  # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[:999:]
print(list2)  # [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[3::]
print(list2)  # [40, 50, 60, 70, 80, 90, 100]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[:5:]
print(list2)  # [10, 20, 30, 40, 50]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[::4]
print(list2)  # [10, 50, 90]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[7:2:-1]
print(list2)  # [80, 70, 60, 50, 40]

list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[7:2:1]
print(list2)  # []

# 一个特殊情况: 当同时省略起始索引和结束索引时,如果步长为负数,那Python会自动对调: 起始位置和结束位置
list1 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
list2 = list1[::-1]
print(list2)  # [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

# 对元组进行切片
tuple1 = (10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
tuple2 = tuple1[0:5:1]
print(tuple2)  # (10, 20, 30, 40, 50)

# 对字符串进行切片
msg1 = 'welcome to atguigu'
msg2 = msg1[2:9:2]
print(msg2)  # 'loet'

73. 序列的其他操作

python 复制代码
# 序列相加
list1 = [10, 20, 30, 40]
list2 = [50, 60, 70, 80]
list3 = list1 + list2
print(list3)  # [10, 20, 30, 40, 50, 60, 70, 80]

tuple1 = (10, 20, 30, 40)
tuple2 = (50, 60, 70, 80)
tuple3 = tuple1 + tuple2
print(tuple3)  # (10, 20, 30, 40, 50, 60, 70, 80)

str1 = 'hello'
str2 = 'atguigu'
str3 = str1 + str2
print(str3)  # 'hello atguigu'

# 错误实例
list1 = [10, 20, 30, 40]
str1 = 'hello'
# print(list1 + str1)  # 报错

# 序列相乘(重复)
list1 = [10, 20, 30, 40]
list2 = list1 * 3
print(list2)  # [10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40]

tuple1 = (10, 20, 30, 40)
tuple2 = tuple1 * 3
print(tuple2)  # (10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40)

str1 = 'hello'
str2 = str1 * 6
print(str2)  # 'hellohellohellohellohellohello'

2026.7.11 19:43

74. 集合_定义集合

python 复制代码
# 定义有内容的【可变集合】
s1 = {10, 20, 20, 30, 40, 40, 50, 60, 60, 70, 80, 90, 100}
s2 = {'你好', 'hello', '你好', 'atguigu', '北京'}
# s3 = {10, '你好', 1, True, 12.4}
s3 = {10, '你好', True, 1, 12.4}
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)
s2.add('尚硅谷')
print(s2)

# 定义有内容的【不可变集合】
s1 = frozenset({10, 20, 20, 30, 40, 40, 50, 60, 60, 70, 80, 90, 100})
s2 = frozenset({'你好', 'hello', '你好', 'atguigu', '北京'})
s3 = frozenset({10, '你好', True, 1, 12.4})
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)
# s2.add('尚硅谷')  # 报错

# frozenset 接受的参数,可以是任意可迭代对象,但最终返回的一定是【不可变集合】
s1 = frozenset([10, 20, 30, 40, 50])
s2 = frozenset((10, 20, 30, 40, 50))
s3 = frozenset('hello')
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)

# 定义空集合(可变集合)
s1 = set()
print(type(s1), s1)  # set set()

# 不能直接写{}来定义空集合,因为直接写{}定义的是: 空字典
s2 = {}
print(type(s2), s2)  # dict {}

# 定义空集合(不可变集合)
s3 = frozenset()
print(type(s3), s3)  # frozenset frozenset()

# 集合中不能嵌套【可变集合】,但可以嵌套【不可变集合】
# 通俗解释: 只有"不可变"的东西,才能安全的放进集合里
s1 = {10, 20, 30, 40, 50}
s2 = frozenset({100, 200, 300, 400, 500})
l1 = [666, 777, 888]
l2 = ('hello', 'atguigu', '北京')

# s3 = {11, 22, 33, s1}  # 运行报错
s3 = {11, 22, 33, s2}
# s3 = {11, 22, 33, l1}  # 运行报错
s3 = {11, 22, 33, l2}
print(s3)

75. 集合_增删改查

python 复制代码
# 增
# add 方法: 向集合中添加元素
from unittest import result

s1 = {10, 20, 30, 40, 50}
s1.add(60)
print(s1)

# update 方法: 向集合中添加元素(必须传递可迭代对象,例如: 列表、元组、集合等)
s1 = {10, 20, 30, 40, 50}
s1.update([60, 70])
s1.update((80, 90))
s1.update({90, 100})
s1.update(range(300, 308))
print(s1)

# 删
# remove 方法: 从集合中移除元素(移除不存在的元素,会报错)
s1 = {10, 20, 30, 40, 50}
s1.remove(20)
print(s1)
# s1.remove(80)  # 运行报错

# discard 方法: 从集合中移除元素(移除不存在的元素,不会报错)
s1 = {10, 20, 30, 40, 50}
s1.discard(20)
print(s1)
s1.discard(80)  # 无报错

# pop 方法: 从集合中移除一个任意元素,返回值是移除的那个元素
s1 = {10, 20, 30, 40, 50}
s2 = {'你好', '北京', '尚硅谷', 'hello'}
result = s1.pop()
print(s1)
print(result)
result = s2.pop()
print(s2)
print(result)

# clear 方法: 清空集合
s1 = {10, 20, 30, 40, 50}
s1.clear()
print(s1)

# 改
# 使用 add + remove 的组合,来实现修改的效果
s1 = {10, 20, 30, 40, 50}
s1.remove(20)
s1.add(66)
print(s1)

# 查: 集合不能通过下标去读取元素,但能通过【成员运算符】去查看集合中是否包含指定元素
# 由于成员运算符适用于所有数据容器,所以我们会等所有数据容器都讲完以后,再说成员运算符
s1 = {10, 20, 30, 40, 50}
# s1[0]  # 报错
# 先提前感受一下成员运算符
result = 20 in s1
print(result)  # True
result = 20 not in s1
print(result)  # False

76. 集合_常用方法

python 复制代码
# 集合A.difference(集合B):
# 作用: 找出集合A中,不同于集合B的元素(集合A 与 集合B 都不变,返回的是一个新的集合)
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1.difference(s2)
print(s1)
print(s2)
print(result)

# 集合A.difference_update(集合B):
# 作用: 从集合A中,删除集合B中存在的元素(集合A会被修改,集合B不会)
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
s1.difference_update(s2)
print(s1)  # {10, 20}
print(s2)
s1 = {10, 20, 30, 40, 50}
s2.difference_update(s1)
print(s1)
print(s2)  # {70, 80}

# 集合A.union(集合B)
# 作用: 合并两个集合,集合A 和 集合B 都不变,返回的是一个新的集合
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1.union(s2)
print(s1)
print(s2)
print(result)
result = s2.union(s1)
print(s1)
print(s2)
print(result)

# 集合A.issubset(集合B)
# 作用: 判断集合A是否为集合B的子集
# 如果 集合A的所有元素都在集合B中,那就返回True,否则返回False
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
s3 = {30, 40, 50}
result = s3.issubset(s1)
print(result)  # True
result = s3.issubset(s2)
print(result)  # True
result = s2.issubset(s1)
print(result)  # False

# 集合A.issuperset(集合B)
# 作用: 判断集合A是否是集合B的超集
# 如果集合A中,包含了集合B中的所有元素,那就返回True,否则返回False
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
s3 = {30, 40, 50}
result = s1.issuperset(s3)
print(result)  # True
result = s2.issuperset(s3)
print(result)  # True
result = s2.issuperset(s1)
print(result)  # False

# 集合A.isdisjoint(集合B)
# 作用: 判断集合A和集合B是否没有交集
# 如果没有交集,返回True;只要有一个公共元素,就返回False
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
s3 = {80, 90}
result = s1.isdisjoint(s3)
print(result)  # True
result = s1.isdisjoint(s2)
print(result)  # False

77. 集合_数学运算

python 复制代码
s1 = {10, 20, 30, 40, 50, 60}
s2 = {40, 50, 60, 70, 80, 90}

# 并集
result = s1 | s2
print(result)  # {70, 40, 10, 80, 50, 20, 90, 60, 30}

# 交集
result = s1 & s2
print(result)  # {40, 50, 60}

# 差集
result = s1 - s2
print(result)  # {10, 20, 30}
result = s2 - s1
print(result)  # {80, 90, 70}

# 对称差集
result = s1 ^ s2
print(result)  # {70, 10, 80, 20, 90, 30}

78. 集合_循环遍历

python 复制代码
s1 = {10, 20, 30, 40, 50, 60}

# 集合不能使用while循环遍历(以下是错误示例)
index = 0
while index < len(s1):
    print(index)
    # print(s1[index])  # 报错
    index += 1

# 集合可以使用for循环遍历
for item in s1:
    print(item)

79. 字典_定义字典

python 复制代码
# 定义有内容的字段
d1 = {'张三': 72, '李四': 60, '王五': 85}
print(type(d1), d1)

# 字典中的key不能重复,若出现重复,则后写的会覆盖之前写的
d1 = {'张三': 72, '李四': 60, '王五': 85, '张三': 99}
print(d1)

# 定义空字典
d1 = {}
d2 = dict()
print(type(d1), d1)
print(type(d2), d2)

# 字典中的key必须是不可变类型,但value可以是任意类型
# 通俗理解: 只有不可变的东西,才能作为key
d1 = {'张三': 72, '李四': 60, '王五': 85}
d1 = {250: 72, '李四': 60, '王五': 85}
d2 = {('抽烟', '喝酒'): 72, '李四': 60, '王五': 85}
print(d1, d2)
# 错误示例: 将列表作为key,是不行的
# d2 = {['抽烟', '喝酒']: 72, '李四': 60, '王五': 85}  # 报错

# 字典可以嵌套
student_dict = {
    2025001: {'姓名': '张三', '年龄': 18, '成绩': 72, '爱好': ['抽烟', '喝酒', '烫头']},
    2025002: {'姓名': '李四', '年龄': 19, '成绩': 60, '爱好': ['唱歌', '跳舞', '打台球']},
    2025003: {'姓名': '王五', '年龄': 20, '成绩': 85, '爱好': ['学习', '看书', '打太极']}
}
print(student_dict)

80. 字典_增删改查

python 复制代码
# 查询
from unittest import result

d1 = {'张三': 72, '李四': 60, '王五': 85}
# 直接取值,若键(key)不存在,会报错
result = d1['张三']
print(result)
# result = d1['奥特曼']  # 运行报错
# print(result)
# 安全取值,若键(key)不存在,会返回默认值(若没有设置默认值,则会返回None)
result = d1.get('奥特曼')
print(result)  # None
result = d1.get('奥特曼', '抱歉,key不存在! ')
print(result)  # 抱歉,key不存在!
result = d1.get('张三', '抱歉,key不存在! ')
print(result)  # 72

# 新增
d1 = {'张三': 72, '李四': 60, '王五': 85}
d1['赵六'] = 100
print(d1)

# 修改
d1 = {'张三': 72, '李四': 60, '王五': 85}
# 修改的写法,与新增的写法一样,若字典中有对应的key,就是修改;若没有,就是新增
d1['张三'] = 97
print(d1)

# 批量修改
d1.update({'李四': 40, '王五', 67})
print(d1)

# 删除
d1 = {'张三': 72, '李四': 60, '王五': 85}

# 删除指定key所对应的那组键值对
del d1['张三']
print(d1)

# 删除指定key所对应的那组键值对,并返回这个key所对应的值
result = d1.pop('张三')
print(result)  # 72

# pop方法可以设置默认值
# 默认值可以保证: 当要删除的key不存在的情况下,程序不会报错,并且返回这个默认值
# result = d1.pop('奥特曼')  # 运行报错
print(d1)
print(result)
result = d1.pop('奥特曼', '删除失败')
print(d1)
print(result)  # 删除失败
result = d1.pop('张三', '删除失败')
print(d1)
print(result)  # 73

# 清空字段
d1.clear()
print(d1)
相关推荐
miss1 小时前
海康威视 IoT 平台前端实战:视频流、海量设备与实时数据可视化
前端·javascript·物联网
用户2849709525571 小时前
基于MQTT+SpringBoot的实验室设备数据采集与实时监控系统实战
前端
前端肥猿1 小时前
控制台中添加插件面板
前端
IT_陈寒2 小时前
SpringBoot自动配置的坑,我的Bean怎么不生效?
前端·人工智能·后端
迷途呀2 小时前
新闻头条后端:新闻缓存模块
前端·redis·python·缓存·fastapi
糖墨夕2 小时前
第一章:为什么你要学 AI Agent?—— 从"切图仔"到全栈的进化之路
前端·javascript·vue.js
随风一样自由2 小时前
【前端+Canvas+航天】长征十号乙火箭回收全流程动画
前端·canvas·长征十号乙
CappuccinoRose3 小时前
CSS、Less、Sass(含 SCSS)、Stylus
前端·css·less·sass·stylus
不听话坏11 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript