oeasy教python108 列表_加法_增强赋值_加等于_extend_扩展列表

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,182元/月
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 描述:想知道如何高效合并和扩展Python列表?本视频对比列表加法运算符、增强赋值(+=)和extend方法的异同,分析它们的性能差异和使用场景。通过实际代码演示,让你掌握列表扩展的最佳实践,提升你的Python编程技能!### 关键词:Python列表扩展, extend方法, 加法运算符, 增强赋值, 列表合并, Python性能优化, 编程技巧, 数据结构操作, Python进阶教程, 代码效率提升


回忆

  • 列表 赋值运算 两种形式
  1. 将列表 直接 赋值
  • 造成两个列表指向同一个对象
  • 一改全改
  1. 将 列表副本 赋给 变量
  • 这两个列表变量指向不同的对象
  • 互不影响
clist1 = list("oeasy")
clist2 = clist1
clist2 = clist1.copy()

  • 列表 能相加 吗?🤔
lst1 + lst2

回忆字符串

  • 字符串可以进行
  • 加法
  • 乘法
"动词打次" + "东东打次"
"动词打次" * 3 + "东东打次"
("动词打次" * 3 + "东东打次") * 4
  • 字符串加法
  • 有啥应用 吗?

四大名著大乱炖

import random
# 从四大名著中分别提取角色和事迹
# 《西游记》
journey_to_the_west_characters = ["孙悟空", "唐僧", "沙僧"]
journey_to_the_west_stories = ["大闹天宫", "三打白骨精", "真假美猴王"]
# 《红楼梦》
dream_of_the_red_chamber_characters = ["林黛玉", "贾宝玉", "薛宝钗"]
dream_of_the_red_chamber_stories = ["黛玉葬花", "宝玉挨打", "宝钗扑蝶"]
# 《三国演义》
romance_of_the_three_kingdoms_characters = ["刘备", "关羽", "诸葛亮"]
romance_of_the_three_kingdoms_stories = ["桃园结义", "草船借箭", "空城计"]
# 《水浒传》
water_margin_characters = ["宋江", "武松", "鲁智深"]
water_margin_stories = ["怒杀阎婆惜", "景阳冈打虎", "倒拔垂杨柳"]
# 汇总角色列表
all_characters = journey_to_the_west_characters + \
                 dream_of_the_red_chamber_characters + \
                 romance_of_the_three_kingdoms_characters + \
                 water_margin_characters
# 汇总事迹列表
all_stories = journey_to_the_west_stories + \
              dream_of_the_red_chamber_stories + \
              romance_of_the_three_kingdoms_stories + \
              water_margin_stories
# 随机搭配角色和事迹
random_character = random.choice(all_characters)
random_story = random.choice(all_stories)
print(f"{random_character}——{random_story}")

结果

  • 代码中的反斜杠 是
  • 续航符
  • line-continuation character
# 汇总角色列表
all_characters = journey_to_the_west_characters + \
                 dream_of_the_red_chamber_characters + \
                 romance_of_the_three_kingdoms_characters + \
                 water_margin_characters
  • 可以避免 横向滚动

列表加法

  • 数字列表
lst1 = list(range(3))
print("lst1:", lst1)
lst2 = [3, 4, 5]
print("lst2:", lst2)
print("lst1 + lst2:", lst1 + lst2)
  • 数字列表
  • 可以相加

  • 字符串列表
  • 可以 相加 吗?

加法运算

  • 字符串列表
  • 也是可以相加的
lst1 = list("oeasy")
lst2 = list("o2z")
print(lst1 + lst2)
  • 但是 相加的结果
  • 没赋给 任何变量
  • 直接 就

  • 想 不让他
  • 咋办呢?

加完了赋值

  • 把加完的结果赋给 lst3
lst1 = list("oeasy")
lst2 = list("o2z")
lst3 = lst1 + lst2
  • 相加结果 有 变量名引用
  • 就不会 被 垃圾回收

  • 什么是垃圾回收呢?

垃圾回收

  • c语言
  • 手动 分配和释放内存
  • 内存空间
  • 分配容易
  • 但 容易 忘记释放
  • 结果
  • 占用内存 越来愈多
  • 造成泄漏、崩溃

  • python 等现代语言 解释器
  • 定期观察 已经分配的 内存空间
  • 是否 还有变量 在引用
  • getrefcount
  • 没有引用的话
  • 就垃圾回收
  • garage collection
lst3 = lst1 + lst2
  • 把求和结果 赋给lst3
  • 就能存的住了
  • 如果 把 求和结果
  • 直接 赋给 lst1 呢?

将列表之和赋回给lst1

lst1 = list("oeasy")
lst2 = list("o2z")
lst1 = lst1 + lst2
  • 赋值成功

  • 能用 增强赋值 吗?

增强赋值

增强赋值

是一种 赋值

在赋值之外 还有增强

  • += 就是 增强赋值运算
  • augmented assignment
lst1 = list("oeasy")
lst2 = list("o2z")
lst1 += lst2
  • lst1 += lst2
  • 相当于 lst1 = lst1 + lst2

  • 这俩完全一样吗?

增强赋值运算

  • 从求和结果来看
  • 两者一致
lst1 = list("oeasy")
print("lst1:", id(lst1))
lst2 = list("o2z")
print("lst2:", id(lst2))
lst1 += lst2 
print("lst1:", id(lst1))
  • 增强赋值中 lst1 的 地址没有变

  • 先求和 再赋值呢?

观察

lst1 = list("oeasy")
print("lst1:", id(lst1))
lst2 = list("o2z")
print("lst2:", id(lst2))
lst1 = lst1 + lst2 
print("lst1:", id(lst1))
  • 从引用地址 来看
  • l1 使用 l1 + l2 的新地址
  • += 则会保留 l1 原来引用的地址

  • 有啥区别吗?

效率

效果 相同    - 但效率不同!

  • 加法运算 效率低
  • 过程是 新建一个列表
  • 然后把 lst1 的列表项都拿过来
  • 再把 lst2 的列表项都拿过来
  • 最后把相加结果 赋给lst1
  • 效率 不如
  • 增强赋值

  • 增强赋值 就是
  • 用列表 扩充(extend)列表

extend

  • 列表还真有个成员方法
  • 就叫做 extend
lst1 = list("oeasy")
lst2 = list("o2z")
lst1.extend(lst2)
  • 确实能够扩列
  • 扩展列表

  • 这个extend怎么用?

查询帮助

help(list.extend)
  • extend
  • 把参数里面的列表
  • 循环地放到extend方法的主体后面

  • 将列表相加
  • lst1 = lst1 + lst2
  • 可以得到列表在 新地址
  • 有 2种方式 可以 扩充列表
  1. lst1 += lst2
  2. lst1.extend(l2)
  • extend(扩列) 和 append(追加)
  • 有什么区别呢?

区别

num_list = [1, 2, 3]
print(num_list)
num_list.append([4, 5])
print(num_list)
num_list.remove([4, 5])
print(num_list)
num_list.extend([4, 5])
print(num_list)
  • 效果不同

对比

  • append
  • 添加是  列表项
  • 把列表作为元素 放到最后
  • extend
  • 扩展 原始列表
  • 把 新列表 对接到 原列表 尾巴上
  • 对应 加法赋值

对比项 append extend
描述 添加的是列表项 扩展原始列表
特点 将元素作为整体添加到列表末尾 把新列表对接到原列表尾巴上,合并两个列表

总结

  • 这次我们了解 列表加法
  1. 对 相加结果 赋值
- lst1 = lst1 + lst2 
- 加法的本质 是  将两个列表 拼接
- 并将 结果位置 赋给帧(frame)上的变量 来引用
  1. 对列表 进行扩充 - 3种做法
  1. lst1 += lst2
  2. lst1[-1:] = lst2
  3. lst1.extend(lst2)
  • 上述 2类方法 结果相同
  • 但是稍有区别
  1. 结果地址
  • 会改变l1地址
  • 后三种不改变地址
  1. 效率不同
  • 后三种效率高
  • 直接扩展列表

  • 既然 有 列表加法
  • 那有 列表乘法 吗?🤔
  • 下次再说 👋
相关文章
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
274 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
373 38
Meta SAM3开源:让图像分割,听懂你的话
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
667 221
|
19小时前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
125 95
|
10天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1606 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
899 61