Python数据容器之元组的用法

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 元组本质上是只读的列表list。除了不能修改之外,其它特性和列表相似。

这是机器未来的第8篇文章


1. 元组概述

元组本质上是只读的列表list。除了不能修改之外,其它特性和列表相似

列表是容器数据类型,可存储多个元素,且支持不同类型数据,可修改,有序列表,可重复。

举例:

x = (1, 'abc', True, {"name":"Joe"}, 1, 2, ['7', '89'])

x

(1, 'abc', True, {'name': 'Joe'}, 1, 2, ['7', '89'])

例子中展现了以下情况:

  • 不同的数据类型共存一个元组的情况:有数值类型、字符串、有列表、字典
  • 元组包含其他容器类型:字典{“name”:“Joe”}和列表[‘7’, ‘89’]
  • 元组展现了重复的数据,列表中存在2个1

2. 定义元组

定义元组的方法有2种,tuple函数和()元组运算符

2.1 tuple函数

首先看一下tuple()函数的描述:从输出的描述信息中可知,tuple仅支持1个参数:

  • 可为空,为空时则创建一个空列表

x1 = tuple()

print(x1, type(x1))

() <class 'tuple'>

不为空时,参数必须是可迭代类型

  • 什么是可迭代对象呢?举个简单的例子,能够在for循环中遍历使用的都是可迭代类型,具体的可迭类型有字符串、列表、元组、字典。

x0 = tuple()                         # 无参数,空元组

print(x0, type(x0))

x1 = tuple("name")                   # 用字符串初始化元组

print(x1, type(x1))

x2 = tuple([1, 2, 'a', 'b', 'c'])    # 用列表初始化元组    

print(x2, type(x2))

x3 = tuple((1, 2, 3, 4))             # 用元组初始化元组

print(x3, type(x3))

d1 = {"name":"zsm", "age":18, "sex":"male"}

x4 = tuple(d1.keys())                  # 用字典初始化元组:对于key和value需要分别处理

x5 = tuple(d1.values())

print(x4, type(x4), x5, type(x5))

2.2 ()元组运算符

x1 = ()                 # 空元组

print(x1, type(x1))

x2 = (1, 2, 3, 4)       # 有元素的元组

print(x2, type(x2))

3. 元组的不可修改性

元组为不可变数据类型,和字符串一样,存储于内存的堆区,是直接引用类型。举例:

x2 = (1, 2, 3, 4)       # 有元素的元组

print(x2, type(x2))

x2[2] = 7

特殊情况:元组中的元素如果是可变数据类型,那么可变数据变量中的元素是可以被修改的,其本质上符合可变数据类型可修改的逻辑。

举例:

x3 = (1, 2, 3, [5, 6, 7], (8, 9, 10))

x3[3] = 5   # 修改元组中的元素x3[3], 元组是不可变数据类型,元组中的元素不可以被修改

x3[3][0] = 20           # 元组中的元素是可变数据类型列表,修改列表中的元组是可行的

x3

x3[4][0] = 22   # 元组中的元素为元组类型时,同样时不可变数据类型,元组中的元素修改也会报错。

x3

4. 元组常用方法

x = (1, 2, 3, [5, 6, 7], (8, 9, 10))

dir(x)

['add',</br> 'class',</br> 'contains',</br> 'delattr',</br> 'dir',</br> 'doc',</br> 'eq',</br> 'format',</br> 'ge',</br> 'getattribute',</br> 'getitem',</br> 'getnewargs',</br> 'gt',</br> 'hash',</br> 'init',</br> 'init_subclass',</br> 'iter',</br> 'le',</br> 'len',</br> 'lt',</br> 'mul',</br> 'ne',</br> 'new',</br> 'reduce',</br> 'reduce_ex',</br> 'repr',</br> 'rmul',</br> 'setattr',</br> 'sizeof',</br> 'str',</br> 'subclasshook',</br> 'count',</br> 'index']

和列表list相对,方法少了很多,仅剩下count和index了。

4.1 count方法

统计元素在元素中的个数

x = (1, 'abc', True, {"name":"Joe"}, 1, 2, ['7', '89'])     # 注意:True也被认为是1

x.count(1)

4.2 index方法

返回元组中元素第一次出现的索引位置

x = (1, 'abc', True, {"name":"Joe"}, 1, 2, ['7', '89'])     # 2所在位置索引为5

x.index(2)

以上就是python列表的基础语法知识,更加深入的用法会在人工智能的学习过程中学到!

扩展:如果真的需要修改元组,有什么办法呢?

请关注下一节:序列。

《Python零基础快速入门系列》快速导航:

推荐阅读:


相关文章
|
12天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
21 1
|
13天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
13天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
25天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
53 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
12天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
21 0
|
8天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
33 2
|
18天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
14天前
|
关系型数据库 MySQL API
|
6天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
8天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?