首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >oeasy教python108 列表_加法_增强赋值_加等于_extend_扩展列表

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

原创
作者头像
oeasy
发布2025-11-30 09:19:24
发布2025-11-30 09:19:24
210
举报

回忆

  • 列表 赋值运算 两种形式
    1. 将列表 直接 赋值 - 造成两个列表指向同一个对象 - 一改全改
    2. 将 列表副本 赋给 变量 - 这两个列表变量指向不同的对象 - 互不影响
代码语言:txt
复制
clist1 = list("oeasy")
clist2 = clist1
clist2 = clist1.copy()
图片描述
图片描述
  • 列表 能相加 吗?🤔
代码语言:txt
复制
lst1 + lst2

回忆字符串

  • 字符串可以进行 - 加法 - 乘法
代码语言:txt
复制
"动词打次" + "东东打次"
"动词打次" * 3 + "东东打次"
("动词打次" * 3 + "东东打次") * 4
  • 字符串加法 - 有啥应用 吗?

四大名著大乱炖

图片描述
图片描述
代码语言:txt
复制
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
代码语言:txt
复制
# 汇总角色列表
all_characters = journey_to_the_west_characters + \
                 dream_of_the_red_chamber_characters + \
                 romance_of_the_three_kingdoms_characters + \
                 water_margin_characters
  • 可以避免 横向滚动

列表加法

代码语言:txt
复制
lst1 = list(range(3))
print("lst1:", lst1)
lst2 = [3, 4, 5]
print("lst2:", lst2)
print("lst1 + lst2:", lst1 + lst2)
  • 数字列表 - 可以相加
图片描述
图片描述
  • 字符串列表 - 可以 相加 吗?

加法运算

  • 字符串列表 - 也是可以相加的
代码语言:txt
复制
lst1 = list("oeasy")
lst2 = list("o2z")
print(lst1 + lst2) 
  • 但是 相加的结果 - 没赋给 任何变量 - 直接 就
图片描述
图片描述
  • 想 不让他 - 咋办呢?

加完了赋值

  • 把加完的结果赋给 lst3
代码语言:txt
复制
lst1 = list("oeasy")
lst2 = list("o2z")
lst3 = lst1 + lst2 
  • 相加结果 有 变量名引用 - 就不会 被 垃圾回收
图片描述
图片描述
  • 什么是垃圾回收呢?

垃圾回收

  • c语言 - 手动 分配和释放内存
  • 内存空间 - 分配容易 - 但 容易 忘记释放 - 结果 - 占用内存 越来愈多 - 造成泄漏、崩溃
图片描述
图片描述
  • python 等现代语言 解释器 - 定期观察 已经分配的 内存空间 - 是否 还有变量 在引用 - getrefcount - 没有引用的话 - 就垃圾回收 - garage collection
代码语言:txt
复制
lst3 = lst1 + lst2 
  • 把求和结果 赋给lst3 - 就能存的住了
  • 如果 把 求和结果 - 直接 赋给 lst1 呢?

将列表之和赋回给lst1

代码语言:txt
复制
lst1 = list("oeasy")
lst2 = list("o2z")
lst1 = lst1 + lst2 
  • 赋值成功
图片描述
图片描述
  • 能用 增强赋值 吗?

增强赋值

增强赋值

是一种 赋值

在赋值之外 还有增强

  • += 就是 增强赋值运算 - augmented assignment
代码语言:txt
复制
lst1 = list("oeasy")
lst2 = list("o2z")
lst1 += lst2 
  • lst1 += lst2 - 相当于 lst1 = lst1 + lst2
图片描述
图片描述
  • 这俩完全一样吗?

增强赋值运算

  • 从求和结果来看 - 两者一致
代码语言:txt
复制
lst1 = list("oeasy")
print("lst1:", id(lst1))
lst2 = list("o2z")
print("lst2:", id(lst2))
lst1 += lst2 
print("lst1:", id(lst1))
  • 增强赋值中 lst1 的 地址没有变
图片描述
图片描述
  • 先求和 再赋值呢?

观察

代码语言:txt
复制
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
代码语言:txt
复制
lst1 = list("oeasy")
lst2 = list("o2z")
lst1.extend(lst2)
  • 确实能够扩列 - 扩展列表
图片描述
图片描述
  • 这个extend怎么用?

查询帮助

代码语言:txt
复制
help(list.extend)
  • extend - 把参数里面的列表 - 循环地放到extend方法的主体后面
图片描述
图片描述
  • 将列表相加 - lst1 = lst1 + lst2 - 可以得到列表在 新地址
  • 有 2种方式 可以 扩充列表 1. lst1 += lst2 2. lst1.extend(l2)
  • extend(扩列) 和 append(追加) - 有什么区别呢?

区别

代码语言:txt
复制
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)上的变量 来引用 2. 对列表 进行扩充 - 3种做法 1. lst1 += lst2 2. lst1-1: = lst2 3. lst1.extend(lst2)
  • 上述 2类方法 结果相同 - 但是稍有区别 1. 结果地址 - 会改变l1地址 - 后三种不改变地址 2. 效率不同 - 后三种效率高 - 直接扩展列表
图片描述
图片描述
  • 既然 有 列表加法 - 那有 列表乘法 吗?🤔
  • 下次再说 👋

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回忆
    • 回忆字符串
    • 四大名著大乱炖
    • 结果
    • 列表加法
    • 加法运算
    • 加完了赋值
    • 垃圾回收
    • 将列表之和赋回给lst1
    • 增强赋值
    • 增强赋值运算
    • 观察
    • 效率
    • extend
    • 查询帮助
    • 区别
    • 对比
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档