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

Python3 元组

前言

本文主要介绍Python中的元组(tuple),主要内容包括 元组简介、元组特性、元组的基本操作。

文章目录

  • 前言
  • 一、元组简介
  • 二、元组特性
    • 1、不可变性
    • 2、有序性
    • 3、异构性
    • 4、可以嵌套使用
    • 5、元组类型比列表类型更加节省内存空间
  • 三、元组的基本操作
    • 1、创建
    • 2、索引
    • 3、切片
    • 4、查询
    • 5、统计
    • 6、拼接
    • 7、修改

一、元组简介

元组是一系列不可变的Python对象,一种序列。元组的定义语法为:(元素1, 元素2, …, 元素n),如:

my_tuple = (1, 2, 3)
print(type(my_tuple))

输出结果:

<class 'tuple'>

二、元组特性

1、不可变性

元组的元素不可修改,一旦创建之后就不能再改变,如:

my_tuple = (1, 2, 3)
my_tuple[1]=5print(type(my_tuple))

输出结果:

TypeError: 'tuple' object does not support item assignment  #TypeError: 'tuple'对象不支持项赋值

2、有序性

元组是有序的,每个元素都有固定的位置。可以通过索引来访问元素,也可以使用切片来获取元素的子集,如:

my_tuple = (1, 2, 3)
print(my_tuple[2])
print(my_tuple[:2])

输出结果:

3
(1, 2)

3、异构性

元组可以包含不同类型的元素,比如整数、浮点数、字符串等,如:

my_tuple = (1, 1.20, "hello",[3,4])
print(my_tuple)

输出结果:

(1, 1.2, 'hello', [3, 4])

4、可以嵌套使用

元组中的元素可以是其他元组,这样就可以形成嵌套的元组结构,如:

my_tuple = (1, 2,3 ,(4,5,6))
print(type (my_tuple[3]))

输出结果:

<class 'tuple'>

5、元组类型比列表类型更加节省内存空间

两者的内存占用情况相比较而言,元组占用的内存空间更小,如:

#引入sys 文件,我们要用到sys中的getsizeof()来获取对象占用内存的大小
import sysmy_tuple = (1, 2, 3, 4, 5)
my_list = [1, 2, 3, 4, 5]
print("元组内存占用: ",sys.getsizeof(my_tuple))
print("列表内存占用: ",sys.getsizeof(my_list))

输出结果:

元组内存占用:   80
列表内存占用:   104

三、元组的基本操作

元组的基本操作有创建、索引、切片、查询、统计、拼接等。

1、创建

创建一个元组可以使用小括号,多个元素之间用逗号 , 分隔,如:

my_tuple1 = ()my_tuple2 = (1,)  #这里的,号不能省略,否则my_tuple2会被定义成int类型
my_tuple3 = ('apple', 'banana', 'cherry')print(type (my_tuple1))
print(type (my_tuple2))
print(type (my_tuple3))

输出结果:

<class 'tuple'>
<class 'tuple'>
<class 'tuple'>

2、索引

索引的操作就是根据位置获取数组中的单个值,如:

my_tuple = (1, 2, 3)
print(my_tuple[1])
print(my_tuple[2])

输出结果:

2
3

3、切片

切片就是从元组中取多个元素的操作。下面我们看几个例子:

my_tuple = ('a', 'b', 'c', 'd', 'e', 'f', 'g')
print(my_tuple[1:3])
print(my_tuple[-3:-1])
print(my_tuple[:3])
print(my_tuple[:])
print(my_tuple[2::])
print(my_tuple[::2])print(type(my_tuple[::2]))

输出结果:

('b', 'c')
('e', 'f')
('a', 'b', 'c')
('a', 'b', 'c', 'd', 'e', 'f', 'g')
('c', 'd', 'e', 'f', 'g')
('a', 'c', 'e', 'g')
<class 'tuple'>

可以从例子看出来切片的几种写法和功能:
1.my_tuple[a:b]:取元组中下标为 a ~ b -1 的元素,可以用区间表示为 [a, b)
2.my_tuple[a:]:取元组中下标为 a ~ 列表最后的元素
3.my_tuple[:b]:取元组中下标为 b - 1 及其之前的元素
4.my_tuple[:]:取元组中的所有元素
5.my_tuple[a🅱️c]:在元组下标为 a ~ b -1 的元素中,每间隔c取一个元素

4、查询

可以使用 in 或 not in 运算符来判断元素是否存在于元组中,如:

my_tuple= (1, 2, 3)
print(2 in my_tuple)
print(4 not inmy_tuple)

输出结果:

True
True

5、统计

可以使用count()来统计列表内相同元素的个数的,如:

my_tuple = (1, 2, 3, 2, 4, 2)
print(my_tuple.count(2))

输出结果:

3

6、拼接

使用 + 运算符可以将两个元组合并成一个新的元组,如:

tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
my_tuple = tup1 + tup2
print(my_tuple)

输出结果:

(1, 2, 3, 4, 5, 6)

7、修改

元组是不可变的,因此不能通过赋值语句来修改元素的值。不过,可以创建一个新的元组来替代原来的元组,从而间接地“修改”元组,如:

my_tuple = (1, 2, 3)
my_tuple = (4, 5, 6)
print(my_tuple)

输出结果:

(4, 5, 6)

还有一种特殊情况,当元素是可变对象时,对象内部属性是可以修改的!如:

my_tuple = ('a', 'b', ['A', 'B'])
my_tuple[2][0] = 'X'
my_tuple[2][1] = 'Y'
print(my_tuple)print(type(my_tuple[2]))

输出结果:

('a', 'b', ['X', 'Y'])
<class 'list'>

这里是因为第三个元素是list类型,而list本身就是可以被修改的。而元组中指向的第三个元素始终没有,它还是指向最初那个列表,变的是列表里面的内容。

相关文章:

  • 制造企业如何通过PLM系统实现BOM管理的飞跃
  • AI的绘画工具有哪些?
  • 批量归一化(BN)和层归一化(LN)的区别
  • 【电子通识】什么是电力电子
  • 001----flask
  • C#,JavaScript实现浮点数格式化自动保留合适的小数位数
  • Flutter 中的 SliverLayoutBuilder 小部件:全面指南
  • Flutter:革新移动开发的开源框架
  • Android 图表开发开源库 MPAndroidChart 使用总结
  • C++面试题其二
  • 学习小心意——python的构造方法和析构方法
  • Configure Google Chrome Settings with Group Policy
  • B端UI设计,演绎高情逸态之妙
  • 生物制药企业选择谷歌云的理由有哪些?
  • PCIe的链路状态
  • [nginx文档翻译系列] 控制nginx
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2017-09-12 前端日报
  • create-react-app项目添加less配置
  • docker-consul
  • laravel with 查询列表限制条数
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • React系列之 Redux 架构模式
  • SAP云平台里Global Account和Sub Account的关系
  • Sass Day-01
  • SOFAMosn配置模型
  • Vue.js 移动端适配之 vw 解决方案
  • Web设计流程优化:网页效果图设计新思路
  • 百度小程序遇到的问题
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 智能合约开发环境搭建及Hello World合约
  • 终端用户监控:真实用户监控还是模拟监控?
  • C# - 为值类型重定义相等性
  • puppet连载22:define用法
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #《AI中文版》V3 第 1 章 概述
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)C#调用WebService 基础
  • .Family_物联网
  • .Net Core与存储过程(一)
  • .NET的数据绑定
  • .py文件应该怎样打开?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [acm算法学习] 后缀数组SA
  • [AIGC] Kong:一个强大的 API 网关和服务平台