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

简介: 描述:想知道如何高效合并和扩展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月前
|
搜索推荐 Java 关系型数据库
基于Android的在线音乐个性化推荐APP系统
本研究聚焦数字时代下在线音乐个性化推荐APP的开发,探讨其背景、意义与技术实现。面对海量音乐内容带来的发现难题,结合Android Studio、Java、SpringBoot与MySQL等技术,构建智能推荐系统,提升用户体验与平台价值,推动音乐产业数字化发展。
|
4月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
445 1
Linux Command lz4 压缩
Linux Command lz4 压缩
|
2月前
|
机器学习/深度学习 人工智能 运维
AIOps已逝,欢迎进入AgenticOps(运维智能体)时代
GenAI和智能体技术的爆发,为IT运维打开了一扇新的大门,一个更具主动性、自治性和协作性的新时代已经来临,这就是AgenticOps(基于智能体的IT运维)。
|
4月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
159 12
|
4月前
|
机器学习/深度学习 缓存 自然语言处理
【万字长文】大模型训练推理和性能优化算法总结和实践
我们是阿里云公共云 AI 汽车行业大模型技术团队,致力于通过专业的全栈 AI 技术推动 AI 的落地应用。
2265 39
【万字长文】大模型训练推理和性能优化算法总结和实践
|
7月前
|
数据采集 边缘计算 定位技术
ar景区导航导览开发方案:核心技术架构与功能设计
本方案针对传统景区导航吸引力弱、互动性差等问题,融合三维建模、多源定位与AR引擎技术,实现室内外精准导航与AR互动体验。支持AR寻宝等功能,提升游客体验与景区竞争力。
498 0
|
10月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
305 97
|
8月前
|
人工智能 索引 Python
[oeasy]python094_使用python控制音符列表_midi_文件制作
本文介绍了如何使用Python控制音符列表制作MIDI文件。首先回顾了列表下标索引(正数和负数)的用法,接着通过`mido`库实现MIDI文件生成。以《两只老虎》为例,详细解析了代码逻辑:定义音高映射、构建旋律列表、创建MIDI文件框架,并将音符插入音轨。还探讨了音符时值与八度扩展的实现方法。最终生成的MIDI文件可通过不同平台播放或编辑。总结中提到,此技术可用于随机生成符合调性的旋律,同时引发对列表其他实际应用的思考。
289 5
|
11月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
338 29