当前位置: 首页 > news >正文

Python 第 12、13 节课 - 元组和列表

- 第 94 篇 -
Date: 2025 - 04 - 26
Author: 郑龙浩/仟墨
【Python 在校课堂笔记】

Python 第 12、13 节课 - 元组和列表

上课时间:
2025-04-21(12)
2025-04-24(13)

文章目录

  • Python 第 12、13 节课 - 元组和列表
  • 一 元组
    • 1 元组的创建方法
      • ① 全部存储整数
      • ② 每个元素可以存储不同的类型的数据
      • ③ 元组中嵌套元组
      • ④ 元组中嵌套 元组、列表…
      • ⑤ 括号可以省略
      • ⑥ 单元素元组必须加逗号
    • 2 tuple 与 元组 搭配使用
      • ① 可以计算某序列的元素个数
      • ② 将字符串中的每个字符拆分并存储到“元组”中,每个字符分别为元组中的单个的元素
      • ③ 还可以将列表转换为元组
    • 3 count 的使用
      • ① 元素全不都是一个类型
      • ② 有一个元素是元组,该元组中又有一个 `2` 的元素,在对 `2` 计数的时候,不算内部的元组中的元素
    • 4 `t.index(n)` 查找n,返回第一个`t` 的索引
      • ① 如果找到了
      • ② 如果找不到
      • ③ `index(n1, n2)` 可以设置查找的开始索引
  • 二 多变量赋值
      • ① 正常
      • ② 报错情况
      • ③ 使用 `*` 一一匹配
  • 三 列表
    • 1 列表的创建
    • 2 使用split分割输入的字符串
    • 3 修改某个元素
      • ① 用中括号访问某个元素,不越界
      • ② 用中括号访问某个元素,越界访问 –> 报错
    • 4 `l1.append(n) ` 追加
    • 5 `l1.extend(l2) ` 合并
    • 6 `l1.insert(n, x)` 插入
    • 7 `l1.pop(n)` 删除
    • 8 `l1.remove(num)` 移除
    • 9 `l1.clear()` 清除
    • 10 `l1.sort()` 排序
      • ① 默认排序 – 不写参数
      • ② 指定关键词
      • ③ 逆序排序
    • 11 `l1.reverse()` 倒置
    • 12 例题
  • 四 二维列表
    • 1 取某个元素
    • 2 循环遍历元素
  • 五 推导式
    • 1 将循环中的元素存入列表中
    • 2 将循环中符合条件的元素存入列表中
      • ① 只有 `if` 的情况
      • ② 带有 `if - else` 的情况

一 元组

  • 用括号来表示元组的数据
  • 只能读出,不可修改
  • 每个元素的类型可以不同
  • 但是如果 元组 中嵌套了 列表之类的可变的类型, 嵌套的这个列表是可以改变的

1 元组的创建方法

① 全部存储整数

t1 = (1, 2, 3, 4) # 等于 t1 = 1, 2, 3, 4
print (t1)# 打印
(1, 2, 3, 4)

② 每个元素可以存储不同的类型的数据

t2 = (1, '23', 4.5)
print (t2)
print (len(t2))# 打印
(1, '23', 4.5)
3

③ 元组中嵌套元组

t2 = (1, '23', 4.5, (1, 2, "dada"))
print (t2)
print (len(t2))# 打印
(1, '23', 4.5, (1, 2, 'dada'))
4

④ 元组中嵌套 元组、列表…

t3 = (1, '23', 4.5, (1, 2, "dada"), [1, 2, 3])
print (t3)
print (len(t3))# 打印结果
(1, '23', 4.5, (1, 2, 'dada'), [1, 2, 3])
5

⑤ 括号可以省略

t1 = 1, 2, 3, 4# 等于 t1 = (1, 2, 3, 4)
print (t1)# 打印
(1, 2, 3, 4)

⑥ 单元素元组必须加逗号

在创建单元素元组的时候,即使是有括号,也必须要加 ',',否则会被识别为普通变量

l1 = (1,) # 单元素元组
l2 = (1) # 会识别为 int 的 1,而不是只有元素 1 的元组
print (l1)
print (l2)# 打印结果
(1,)
1

2 tuple 与 元组 搭配使用

tuple 可以接受 认可可迭代对象

比如:字符串,列表,range等等

① 可以计算某序列的元素个数

print (tuple(range(5)))
# 打印
(0, 1, 2, 3, 4)

② 将字符串中的每个字符拆分并存储到“元组”中,每个字符分别为元组中的单个的元素

t4 = ('Python') # 这里'Python'并不是元组中的某个元素,而t4中存储的也不是元组,而本来就是字符串,也就相当于这里的括号没有“元组作用”
t5 = tuple('Python')
print (t4)
print (t5)
# 打印
Python
('P', 'y', 't', 'h', 'o', 'n')

③ 还可以将列表转换为元组

之前就在想既然字符串可以转换为元组,那么列表可不可以用这个转换为元组呢???

可以

print(tuple([1, 2, 3, 4]))  
# 打印
(1, 2, 3, 4)

3 count 的使用

只统计顶层元素,不会查找嵌套的元组

比如,在元组中嵌套元组,在查找外层元组的元素的时候,不会查找内部元组的元素,也就是内部元组的元素不会包括在内

t.count(n)

返回n在某序列t中的个数

n 可以是一个值,也可以是一组值

① 元素全不都是一个类型

t = (1, 2, 3, 2)
print (t.count(2))# 打印
2

② 有一个元素是元组,该元组中又有一个 2 的元素,在对 2 计数的时候,不算内部的元组中的元素

也就是统计2的时候,(2, 3) 是当作了另一个元组来匹配的,并不是元素 2

t2 = (1, 2, 2, (2, 3), 4, 5, 6, 7)
print (t2.count(2))# 打印
2 # 答案不是3, 元组中的元组中的 2 不算在内

4 t.index(n) 查找n,返回第一个t 的索引

① 如果找到了

t = (1, 2, 2, 3, 4)
print (t.index(2))# 打印
1

② 如果找不到

t = (1, 2, 2, 3, 4, 6, 7)
print (t.index(5))# 报错

index(n1, n2) 可以设置查找的开始索引

  • n1 是要查找的值
  • n2 是起始的索引
t = (1, 2, 3, 6, 4, 6)
print(t.index(6, 2))  # 从索引 2 开始找 6,返回 索引 3

二 多变量赋值

① 正常

x, y = (5, 10)
m, n = 3, 4
a, b, c = 'xyz' # 对于字符串来说,会将字符自动拆开,分配给a, b, c
print (x, y, m, n, a, b, c, end = ' ')# 打印
5 10 3 4 x y z 

② 报错情况

a2, b2, c2 = 'xyzk' # 报错 因为不可以一一匹配,四个字符不可以给三个变量

③ 使用 * 一一匹配

会自动匹配

但是多的元素匹配的是列表

*a, b, c = 'xyzk'
a2, *b2, c2 = 'xyzk'
a3, b3, *c3 = 'xyzk'
print (a, b, c, end = ' ')
print()
print (a2, b2, c2, end = ' ')
print()
print (a3, b3, c3, end = ' ')# 打印
['x', 'y'] z k 
x ['y', 'z'] k 
x y ['z', 'k'] 

三 列表

  • 用中括号 []

  • 每个元素的类型可以不同

  • 列表可读可改,元组只可读,不可改

  • list 只能接受 1 个可迭代对象,也就是 list 中只能写

    1个string 或 1个列表 或 1个元组

    # 代码举例
    l1 = list((1, 2, 3))
    l2 = list([1, 2, 3])
    l3 = list('123')
    print (l1,l2,l3, end = ' ')# 打印结果
    [1, 2, 3] [1, 2, 3] ['1', '2', '3'] 
    

1 列表的创建

  • list() 参数为空的时候,生成的空列表
l1 = [1, 2, 3, 4, 5]
l2 = list() # --> 空列表
# l3 = list(1, 2, 3, 4, 5, 6) # 错误
l4 = list('abc123')
print (l1)
print (l2)
print (l4)
# 打印
[1, 2, 3, 4, 5]
[]
['a', 'b', 'c', '1', '2', '3']
l3 = list(1, 2, 3, 4, 5, 6) # 报错

2 使用split分割输入的字符串

split() 默认按照 任意空白字符(空格、\t、\n等) 分割

s = 'Life is short, you need   python'
s2 = s = "Life\tis\nshort"
print (s.split()) # 可以按照多个空格,\t 等进行分隔
print (s.split(' ')) # 只能按照单个空格进行分隔
print (s2.split())# 打印
['Life', 'is', 'short,', 'you', 'need', 'python']
['Life', 'is', 'short,', 'you', 'need', '', '', 'python']
['Life', 'is', 'short']

3 修改某个元素

① 用中括号访问某个元素,不越界

l1 = [1, 2, 3, 4, 5]
print (l1[0]) # 打印1

② 用中括号访问某个元素,越界访问 –> 报错

l1 = [1, 2, 3, 4, 5]
print (l1[5]) # 越界访问,会报错

4 l1.append(n) 追加

  • 列表 的末尾,追加元素
  • 只能追加一个元素,如果追加多个元素,一定报错
l1 = [1, 2, 3, 4, 5]
l1.append(6)
print (l1)# 打印
[1, 2, 3, 4, 5, 6]

5 l1.extend(l2) 合并

将列表l2合并在 l1 的后边

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']
l1.extend(l2)
print (l1)# 打印
[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']

6 l1.insert(n, x) 插入

l1 列表中,在索引 n 的前边插入元素 x

l1 = [1, 2, 3, 4, 5]
l1.insert(1, 9)
print (l1)# 打印
[1, 9, 2, 3, 4, 5]
l1 = [1, 2, 3, 4, 5]
l1.insert(5, 6)
print (l1)# 打印
[1, 2, 3, 4, 5, 6]

7 l1.pop(n) 删除

删除索引为 n 的元素

l1 = [1, 2, 3, 4, 5]
l1.pop(0) # 删除索引为0的元素l2 = [1, 2, 3, 4, 5]
l2.pop() # 删除最后一个元素

8 l1.remove(num) 移除

  • 参数num为 int 数值

  • 意思是从 列表 l1 中移除 num

  • 如果有列表中有相同的元素,则只移除第一个

l = [1, 2, 3, 2]
l.remove(2) # 只移除第一个 2# 打印
[1, 3, 2]

9 l1.clear() 清除

清楚列表中的所有元素

l1 = [1, 2, 3, 4, 5]
l1.clear(0) # 删除全部
print (l1)# 打印
[]

10 l1.sort() 排序

  • 默认排序顺序: 从小到大

  • 排序的时候,会对列表中的所有数据在原地进行排序 –> 人话就是,排序会对自身数据进行改变,而不是返回一个排序后的列表

  • 排序的列表中的元素必须是 同一类型

    (特殊: int float,可以在同一列表中进行排序 )

  • 排序规则:

    aa

① 默认排序 – 不写参数

l1 = [23, 45, 11, 46, 9]
l2 = ['专业', '222222222', '姓名', '100']
l3 = ['123', 45] 
l1.sort()
l2.sort()
l3.sort() # 报错# 打印
[9, 11, 23, 45, 46]
['100', '222222222', '专业', '姓名']

② 指定关键词

l4 = ['abdfa', 'Aeffds', 'ff', 'Baa']
l4.sort(key = str.upper) # 将所有小写字母按照大写字母来排序l5 = ['20258', '455', '856', '86']
l5.sort(key = int) # 将字符数字按照 int 形式来排序# 将字符数字按照 int 形式来排序l6 = ['20258', '455', '856666666666', '86']
l6.sort(key = len)# 将字符数字按照 长度 大小来排序print (l4)
print (l5)
print (l6)# 打印['abdfa', 'Aeffds', 'Baa', 'ff']
['86', '455', '856', '20258']
['86', '455', '20258', '856666666666']

③ 逆序排序

  • reverse 指定排序顺序,若是 True 表示的是从大到小排序
  • 原地逆置,不会返回新列表:
l1 = [23, 45, 11, 46, 9]
l1.sort(key = int, reverse = True)print (l1)# 打印
[46, 45, 23, 11, 9]

11 l1.reverse() 倒置

  • 作用是将列表中的元素全部倒置过来
  • l1.reverse() 会改变原来列表中的元素
l1 = [23, 45, 11, 46, 9]
l1.reverse()# 打印
[9, 46, 11, 45, 23]

12 例题

有 10 名同学的78Python课程成绩分别为: 94, 89, 96, 88, 92, 86, 69, 95,78, 85 利用列表分析成绩

输出 平均值,最高的三个成绩i,最低的三个成绩, 成绩中位数

l1  = [94, 89, 96, 88, 92, 86, 69, 95, 78, 85]
l1.sort()
avg = sum(l1) / len(l1)
print ('平均值为:', avg)
print ('最高的三个成绩为:', l1[-1:-4:-1])
print ('最低的三个成绩为为:', l1[0:3])
l1len = len(l1) # 存放长度
t = l1len // 2 # 中间的索引(长度为奇数) 或 中间两个索引的右边那个(长度为偶数)
if l1len % 2: # 如果长度为奇数, 直接打印中间的那个值print ('中位数为:', l1[t])
else: # 如果长度为偶数,取中间两个数的和再除以2print ('中位数为:', (l1[t] + l1[t - 1]) / 2)

四 二维列表

在二维列表中,如果要取某个元素的话,要写两对中括号,第一对表示的是 , 第二对表示的是

1 取某个元素

l1 = [
["张三", "001", 85],
["李四", "002", 92],
["王五", "003", 78],
["赵六", "004", 88]
]
print (l1[0][2]) # 0行2列 的元素
print (l1[1][1]) # 1行1列 的元素
print (l1[2][0]) # 2行0列 的元素

2 循环遍历元素

for arr in l1:print(arr[0], arr[1], arr[2])  # 打印姓名 学号 成绩
l1 = [
["张三", "001", 85],
["李四", "002", 92],
["王五", "003", 78],
["赵六", "004", 88]
]
for i in range(0, 4):for j in range(0, 3):print (l1[i][j], end = ' ')print ()
# 打印结果
张三 001 85
李四 002 92
王五 003 78
赵六 004 88

五 推导式

  • 又名 解析式

  • 从一个序列构建另一个新序列

  • 集成了变换和筛选功能

1 将循环中的元素存入列表中

# [表达式(含有循环要产生的变量) for 变量 in 可迭代对象]
l1 = [a for a in range(5)] # 0 ~ 4 的数字,存入列表中
l2 = [a * 2 for a in range(5)] # 0 ~ 4 之间的数 * 2,存入列表中
l3 = [x * y for x in range(3) for y in range(3)] # 可以写两个循环
l4 = [(x, y) for x in range(3) for y in range(3)]
print (l1)
print (l2)
print (l3)
print (l4)# 打印结果
[0, 1, 2, 3, 4]
[0, 2, 4, 6, 8]
[0, 0, 0, 0, 1, 2, 0, 2, 4]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

2 将循环中符合条件的元素存入列表中

  • 在循环后边可以写条件
  • 只会将符合条件的元素存入列表,不符合条件的元素不会存入列表

① 只有 if 的情况

偶数存入列表

模板

[表达式(含有循环要产生的变量) for 变量 in 可迭代对象 if 条件表达式]

实现

l5 = [a for a in range(10) if a % 2 == 0] # 0 ~ 10 之间 且 是偶数的值 存入列表中
print (l5)# 打印结果
[0, 2, 4, 6, 8]

② 带有 if - else 的情况

偶数存列表,奇数变负数

模板

[表达式1 if 条件 else 表达式2 for 变量 in 可迭代对象]

实现

l2 = [x if x % 2 == 0 else -x for x in range(10)]
print(l2)# 打印结果
[0, -1, 2, -3, 4, -5, 6, -7, 8, -9]

相关文章:

  • Linux基本指令(保姆级教学)
  • 【新技术】Testfy.js v3.0 深度解析与使用指南
  • 关于循环缓冲区
  • MUC基本知识
  • 基于javaweb的SpringBoot小说阅读系统设计与实现(源码+文档+部署讲解)
  • Threejs中顶视图截图
  • Python dotenv 使用指南:轻松管理项目环境变量
  • Bento4的安装和简单转码
  • Linux基础指令【上】
  • 写时拷贝讲解
  • dubbo 隐式传递
  • Python项目实践:控制台银行系统与词频统计工具开发指南
  • 【project】--模拟搭建一个中小型校园网的网络平台
  • SpringBoot 常用注解通俗解释
  • 何恺明团队又发新作!!-用于物理推理的去噪哈密顿网络
  • Linux基础命令总结
  • Set的学习
  • 论文如何降低AIGC?(完整指南版)
  • 【Linux系统篇】:信号的生命周期---从触发到保存与捕捉的底层逻辑
  • 长途骑行装备攻略:VELO维乐 Angel Revo坐垫伴我畅享旅途
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 中国海警局新闻发言人就菲律宾非法登临铁线礁发表谈话
  • 申花四连胜领跑中超,下轮榜首大战对蓉城将是硬仗考验
  • 伤者升至80人,伊朗港口爆炸源头或为“危险品和化学品仓库”
  • 俄方证实俄总统普京正在会见美特使威特科夫
  • 青海一只人工繁育秃鹫雏鸟破壳后脱险成活,有望填补国内空白