Python序列之元组

系列文章目录

Python序列之列表


Python序列之元组


前言

前面我们已经讲了Python中的列表:Python序列之列表。今天我们再来看一下Python中另一种常用的序列------元组。


提示:以下是本篇文章正文内容,下面案例可供参考

一、元组是什么?

列表属于可变序列,可以任意修改列表中的元素。

元组属于不可变序列,不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。

因此,我们只需学元组的创建和删除,元素的访问和计数即可。元组支持如下操作:

  • 索引访问
  • 切片操作
  • 连接操作
  • 成员关系操作
  • 比较运算操作
  • 计数:元组长度len()、最大值max()、最小值min()、求和sum()等

二、元组操作

1.元组的创建

(1)通过()创建。小括号可以省略。

如果元组只有一个元素,则必须后面加逗号。这是因为解释器会把(1)解释为整数1,(1,)解释为元组。

python 复制代码
a = (1,)
b = (1)
c = 1,

print(type(a))  # 输出:<class 'tuple'>
print(type(b))  # 输出:<class 'int'>
print(type(c))  # 输出:<class 'tuple'>

(2)通过tuple()函数创建。

语法:tuple(可迭代的对象)

python 复制代码
a = tuple()  # 创建一个空元组: ()
b = tuple('yyy')  # ('y', 'y', 'y')
c = tuple(range(3))  # (0, 1, 2)
d = tuple([2, 3, 4])  # (2, 3, 4)

总结:

  • tuple()可以接收列表、字符串、其他序列类型、选代器等生成元组。
  • list()可以接收元组、字符串、其他序列类型、选代器等生成列表。

(3)通过生成器推导式创建。

从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号

列表推导式直接生成列表对象,生成器推导式生成的不是列表 也不是元组 ,而是一个生成器对象

我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建 该生成器对象,换句话说,生成器对象只能遍历一次,是一次性用品

python 复制代码
a = (x*10 for x in range(5))
print(a)  # 输出:<generator object <genexpr> at 0x000001A5D2CC44A0>
b = tuple(a)
print(b)  # 输出:(0, 10, 20, 30, 40)
c = tuple(a)
print(c)  # 输出:()

上面第二次使用生成器a生成元组c的时候,竟然生成了一个空元组,这说明生成器对象是一次性用品。

下面使用__next__()方法的遍历,最后出现了报错,也可以说明生成器的一次性属性:

python 复制代码
a = (x for x in range(3))
print(a.__next__())  # 输出:0
print(a.__next__())  # 输出:1
print(a.__next__())  # 输出:2
print(a.__next__())  # 输出:报错:StopIteration

2.元组的访问

(1)元组的元素不能修改

python 复制代码
a = (20, 10, 30, 9, 8)
a[3]=33  # 报错:TypeError: 'tuple' object does not support item assignment

(2)元组的元素访问、index()、count()、切片等操作,和列表一样。

python 复制代码
a = (30, 5, 8, 9, 8)
print(a[1])  # 输出:5
print(a[1:3])  # 输出:(5, 8)
print(a[:4])  # 输出:(30, 5, 8, 9)
print(a.count(8))  # 输出:2
print(a.index(30))  # 输出:0

(3)通过zip()函数合成元组后访问

zip(列表1,列表2,...)将多个列表对应位置的元素组合成为元组,并返回这个zip对象 。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

python 复制代码
a = [10, 20, 30]
b = [40, 50, 60]
c = [70, 80, 90, 100]
d = zip(a, b, c)
print(d)  # 输出:<zip object at 0x00000262542A4E00>
e = list(d)  
print(e)  # 输出:[(10, 40, 70), (20, 50, 80), (30, 60, 90)]

zip在英文中意味"拉链",在Python中是将多个元组像拉拉链一样合成为一个列表,方便使用for循环遍历。

那zip的实战意义在哪呢?给你举个实际的例子就明白了:

python 复制代码
authors = ['吴承恩', '曹雪芹', '罗贯中', '施耐庵']
books = ['西游记', '红楼梦', '三国演义', '水浒传']
for author, book in zip(authors, books):
    print(author+':'+book)

打印效果如下:

shell 复制代码
吴承恩:西游记
曹雪芹:红楼梦
罗贯中:三国演义
施耐庵:水浒传

3. 元组的排序

列表关于排序的方法list.sort()是修改原列表对象,由于元组是不可修改 的,故元组没有该方法。如果要对元组排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。

python 复制代码
a = (3, 6, 1, 100, 5, 4)
b = sorted(a)
print(b)  # 输出:[1, 3, 4, 5, 6, 100]

4.元组的统计

python 复制代码
a = (1, 2, 3)
print(max(a))  # 输出:3
print(min(a))  # 输出:1
print(sum(a))  # 输出:6

三、总结

  • 元组的核心特点是:不可变序列。
  • 元组的访问和处理速度比列表快。
  • 与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。
相关推荐
不去幼儿园22 分钟前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou5 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书5 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024066 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic7 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端