学习python的第九天之数据类型——tuple元组

学习python的第九天之数据类型——tuple元组

在Python中,元组(Tuple)是一个不可变的序列类型,意味着一旦元组被创建,你就不能添加、删除或更改其内的元素。元组通常用于存储不应该改变的数据集合,比如程序的配置设置或者函数返回多个值时作为返回值。

支持的数据类型:int, str, float, bool, complex, list, dictionary, tuple, set

特点:

  1. 没有长度限制
  2. 可以存放任意类型
  3. 不允许删除、添加、修改

创建元组

使用圆括号 () 将一系列项包围起来,项之间用逗号 , 分隔。

my_tuple1 = (1, 2, 3)
print(my_tuple1)  # 输出: (1, 2, 3)

# 不使用圆括号也可以创建元组,只需简单地将项用逗号分隔。这种方法称为元组打包。
my_tuple2 = 1, 2, 3
print(type(my_tuple2), my_tuple2)  #  输出: <class 'tuple'> (1, 2, 3)

# 使用 tuple() 函数,可以将一个可迭代对象转换为元组。
my_list = [1, 2, 3]
my_tuple3 = tuple(my_list)
print(my_tuple3)  # 输出: (1, 2, 3)

# 可以包含不同类型的元素
my_tuple4 = (1, 'Hello', 3.14, True, 3+4j, [1,2], {'1':'one', '2':'two'}, (3, 4), {5, 6})
print(my_tuple4)  # 输出: (1, 'Hello', 3.14, True, 3+4j, [1,2], {'1':one, '2':two}, (3, 4), {5, 6})

# 空列表
empty_tuple1 = ()
empty_tuple2 = tuple()
print(empty_tuple1)  # 输出: ()
print(empty_tuple2)  # 输出: ()

访问元组元素

可以通过索引来访问元组中的元素,索引从0开始。

my_tuple = ('a', 'b', 'c', 'd')
print(my_tuple[0])  # 输出: 'a'
print(my_tuple[1])  # 输出: 'd'

# 使用负数索引从元组末尾开始访问
print(my_tuple[-1])  # 输出: 'd'
print(my_tuple[-2])  # 输出: 'c'

元组的切片

与列表类似,你也可以对元组进行切片操作,得到一个新的元组。使用切片时,需要指定开始索引和结束索引,格式为 tuple[start:end:step]。请注意,返回的切片会包含开始索引处的元素,但不包含结束索引处的元素。

# 创建一个元组
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

# 获取索引2到索引5之间的元素(不包括索引5)
subtuple = my_tuple[2:5]
print(subtuple)  # 输出: (2, 3, 4)

# 获取从索引0到索引4之间的元素,每隔2个取一个
subtuple = my_tuple[0:5:2]
print(subtuple)  # 输出: (0, 2, 4)

# 获取从索引3开始到末尾的元素
subtuple = my_tuple[3:]
print(subtuple)  # 输出: (3, 4, 5, 6, 7, 8, 9)

# 获取从开始到索引7(不包括)的元素,每隔3个取一个
subtuple = my_tuple[:7:3]
print(subtuple)  # 输出: [0, 3, 6]

# 获取列表的所有元素,但是倒序(步长为-1)
reversed_tuple = my_tuple[::-1]
print(reversed_tuple)  # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# 获取列表的所有元素(相当于复制了一个列表)
copy_tuple = my_tuple[:]
print(copy_tuple)  # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在Python中,copy_tuple = my_tuple[:]copy_tuple = my_tuple 有着本质的区别。区别等同于列表。

元组的不可变性

元组的不可变性意味着一旦它被创建,你就不能修改它。

my_tuple = (1, 2, 3)
my_tuple[0] = 4  # 报错: TypeError: 'tuple' object does not support item assignment

但是,如果元组包含了可变对象(如列表),那么这些对象本身是可以被修改的。

my_tuple = (1, [2, 3])
my_tuple[1][0] = 4  # 这是允许的,因为修改的是列表,而不是元组本身
print(my_tuple)  # 输出: (1, [4, 3])

元组的常用函数

  1. **len(tuple)**‌:

    • 返回元组中元素的个数。
    my_tuple = (1, 2, 3, 4, 5)
    length = len(my_tuple)
    print(length)  # 输出: 5
    
  2. ‌**max(tuple)‌ 和 ‌min(tuple)**‌:

    • 返回元组中的最大值和最小值。这些函数要求元组中的元素是可比较的(例如,都是数字或都是字符串)。
    my_tuple = (3, 1, 4, 1, 5)
    max_value = max(my_tuple)
    min_value = min(my_tuple)
    print(max_value)  # 输出: 5
    print(min_value)  # 输出: 1
    
  3. ‌**tuple(iterable)**‌:

    • 将一个可迭代对象(如列表、集合、字典的键或值等)转换为元组。
    my_list = [1, 2, 3, 4, 5]
    my_tuple = tuple(my_list)
    print(my_tuple)  # 输出: (1, 2, 3, 4, 5)
    
  4. ‌**sum(tuple)**‌:

    • 返回元组中所有数值元素的总和。如果元组包含非数值元素,则会引发TypeError
    my_tuple = (1, 2, 3, 4, 5)
    total = sum(my_tuple)
    print(total)  # 输出: 15
    
  5. ‌**any(tuple)‌ 和 ‌all(tuple)**‌:

    • any()返回True如果元组中至少有一个元素为True(或等价于True的值,如非零数字、非空字符串等)。

    • all()返回True如果元组中的所有元素都是True(或等价于True的值)。

    my_tuple = (0, 1, 2, 3, 4)
    any_result = any(my_tuple)
    all_result = all(my_tuple)
    print(any_result)  # 输出: True,因为至少有一个元素是True(非零)
    print(all_result)  # 输出: False,因为不是所有元素都是True(0是False)
    
  6. ‌**enumerate(tuple)**‌:

    • 返回一个枚举对象,该对象在遍历时会产生包含元组中每个元素的索引和值的元组。
    my_tuple = ('a', 'b', 'c')
    for index, value in enumerate(my_tuple):
        print(index, value)
    # 输出:
    # 0 a
    # 1 b
    # 2 c
    
  7. ‌**zip(\*tuples)**‌:

    • 将多个元组(或其他可迭代对象)的元素按照位置组合成新的元组,返回一个由这些新元组组成的迭代器。
    tuple1 = (1, 2, 3)
    tuple2 = ('a', 'b', 'c')
    zipped = zip(tuple1, tuple2)
    for item in zipped:
        print(item)
    # 输出:
    # (1, 'a')
    # (2, 'b')
    # (3, 'c')
    
  8. ‌**元组解包(Unpacking)**‌:

    • 可以使用*操作符将元组解包到多个变量中,或者用于函数调用时传递参数。
    my_tuple = (1, 2, 3)
    a, b, c = my_tuple
    print(a, b, c)  # 输出: 1 2 3
    
  9. ‌**元组连接(Concatenation)**‌:

    • 可以使用+操作符将多个元组连接成一个新的元组。
    tuple1 = (1, 2, 3)
    tuple2 = (4, 5, 6)
    concatenated_tuple = tuple1 + tuple2
    print(concatenated_tuple)  # 输出: (1, 2, 3, 4, 5, 6)
    
  10. ‌**元组重复(Repetition)**‌:

    • 可以使用*操作符重复元组中的元素,生成一个新的元组。
    my_tuple = (1, 2, 3)
    repeated_tuple = my_tuple * 2
    print(repeated_tuple)  # 输出: (1, 2, 3, 1, 2, 3)
    
  11. ‌**innot in运算符**‌:

    • 用于检查一个值是否存在于元组中。
    my_tuple = (1, 2, 3, 4, 5)
    print(3 in my_tuple)  # 输出: True
    print(6 not in my_tuple)  # 输出: True
    
  12. ‌**count(value)方法(需转换为列表后使用)**‌:

    • 虽然元组本身没有count方法,但可以将元组转换为列表后使用list.count(value)来计算某个值在元组中出现的次数。
    my_tuple = (1, 2, 3, 2, 1)
    my_list = list(my_tuple)
    count = my_list.count(2)
    print(count)  # 输出: 2
    
  13. ‌**index(value)方法(需转换为列表后使用)**‌:

    • 同样,元组没有index方法,但可以转换为列表后使用list.index(value)来查找某个值在元组中的位置。

      my_tuple = (1, 2, 3, 2, 1)
      my_list = list(my_tuple)
      index = my_list.index(3)
      print(index)  # 输出: 2(注意,这里是转换后的列表的索引)
      

元组的用途

  • 作为字典的键‌:因为元组是不可变的,所以它们可以被用作字典的键,而列表则不可以。
  • 保护数据‌:当你希望保护数据不被修改时,可以使用元组。
  • 函数返回多个值‌:函数可以直接返回一个元组,让调用者可以方便地解包得到多个返回值。

想给元组强行排序的办法

在Python中,sorted() 函数可以用于对任何可迭代对象进行排序,包括元组(tuple)列表(list)等。但需要注意的是,元组(tuple)本身是不可变的,因此当你使用 sorted() 对元组排序时,实际上是返回了一个新的列表,而不是修改原来的元组。如果你想得到一个排序后的元组,可以将排序后的列表转换为元组。

# 假设有一个元组
my_tuple = (3, 1, 4, 1, 5, 9, 2)

# 使用 sorted() 对元组排序,返回的是列表
sorted_list = sorted(my_tuple)

# 将排序后的列表转换回元组
sorted_tuple = tuple(sorted_list)

print(sorted_tuple) # 输出: (1, 1, 2, 3, 4, 5, 9)

想给元组强行添加、修改、删除的办法

核心思路就是将元组转成列表,再进行添加、修改、删除,最后再转回元组。

其实是虚假的添加、修改、删除,应为前后两个元组的地址是不一样的。

所以不建议这样操作,这样还不如直接用列表。

创建一个元素的元组(额外注意的情况)

声明一个元素的元组时,必须要在这个元素后加上逗号(,)。

# 创建一个元素的元组
my_tuple1 = (1,)
print(type(my_tuple1))  # 输出: <class 'tuple'>

my_tuple2 = (1) 
print(type(my_tuple2))  # 输出: <class 'int'>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913874.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM双亲委派与自定义类加载器

一. 类加载过程 Java Application运行前需要将编译生成的字节码文件加载到JVM中&#xff0c;JVM类加载过程如下&#xff1a; 1. 加载 加载阶段是类加载的第一步&#xff0c;在加载阶段JVM会查找并加载类的字节码文件&#xff0c;这个过程通常从类路径&#xff08;Classpath…

多媒体信息检索

文章目录 一、绪论二、文本检索 (Text Retrieval)(一) 索引1.倒排索引2.TF-IDF (二) 信息检索模型 (IR模型&#xff0c;Information Retrieval)1.布尔模型 (Boolean模型)(1)扩展的布尔模型 (两个词)(2)P-Norm模型 (多个词) 2.向量空间模型 (Vector Space Model&#xff0c;VSM)…

Python | Leetcode Python题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution:def maxDepth(self, root: Node) -> int:if root is None:return 0ans 0queue [root]while queue:queue [child for node in queue for child in node.children]ans 1return ans

【Pikachu】SQL-Inject实战

困难、痛苦、挫折总是接踵而至&#xff0c;这正是世间的常理。要是输了&#xff0c;就只能说明我不过是如此程度的男人。 1.Sql Inject(SQL注入)概述 Sql Inject(SQL注入)概述 在owasp发布的top10排行榜里&#xff0c;注入漏洞一直是危害排名第一的漏洞&#xff0c;其中注入…

VSCode中python插件安装后无法调试

问题 VSCode中python插件安装后无法调试&#xff0c;如下&#xff0c;点击调试&#xff0c;VScode中不报错&#xff0c;也没有调试 解决方法 1、查看配置 打开所在路径 2、拷贝 将整个文件夹拷贝到vscode默认路径下 3、问题解决 再次调试&#xff0c;可以正常使用了…

官方压测工具memtier-benchmark压测redis

1 概述 memtier_benchmark是一种高吞吐量的性能基准测试工具&#xff0c;主要用于Redis和Memcached。它是 Redis官方开发团队开发的&#xff0c;旨在生成各种流量模式&#xff0c;以便测试和优化以上两个数据库的性能。 memtier_benchmark的一些关键特点如下&#xff1a; 多…

海外云手机在出海业务中的优势有哪些?

随着互联网技术的快速发展&#xff0c;海外云手机已在出海电商、海外媒体推广和游戏行业都拥有广泛的应用。对于国内的出海电商企业来说&#xff0c;短视频引流和社交平台推广是带来有效流量的重要手段。借助云手机&#xff0c;企业能够更高效地在新兴社交平台上推广产品和品牌…

kafka 的一些问题,夺命15连问后续

16、kafka是如何做到高效读写 因为kafka本身就是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高 读取数据可以采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff08;mysql中索引多了以后&#xff0c;写入速度就慢了&#xff09; 可以顺序写磁盘&#…

Vue Cli 脚手架目录文件介绍

小试牛刀 //vetur高亮; vuetab 快速生成 <template><div class"box">我是个盒子<button click"fn">按钮</button></div> </template><script> export default {methods:{fn(){alert("Hello Vue")}} …

基于springboot的家装平台设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

Docker平台搭建方法

Docker平台搭建方法 1.1在VMware中创建两个虚拟机&#xff0c;只需要1个网卡&#xff0c;连接192.168.200.0网络。 虚拟机分配2个CPU,2G内存&#xff0c;60G硬盘&#xff0c;主机名分别为server和client,IP地址分别为192.168.200.137和192.168.200.138。server节点还兼做regis…

cache(二)直接缓存映射

在知乎发现一份不错得学习资料 请教CPU的cache中关于line,block,index等的理解&#xff1f; PPT 地址 https%3A//cs.slu.edu/%7Efritts/CSCI224_S15/schedule/chap6-cache-memory.pptx 课程主页 https://cs.slu.edu/~fritts/CSCI224_S15/schedule/ 0. 缓存定义 这张图展示了缓…

Zookeeper的安装与使用

一、简介 1.1、概念 ZooKeeper 是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发&#xff0c;提供简单易用的接口和高性能、高稳定性…

SQLI LABS | Less-41 GET-BLIND Based-Intiger-Stacked

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-41/ 本关是堆…

SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)

目录 背景遇到的问题 RocketMQ 基础基础消息模型扩展后的消息模型部署模型相关概念点 方案对比影子Topic的方案Tag的方案UserProperty的方案影子Group的方案灰度分区的方案方案对比 灰度分区方案设计适配只有部分灰度的情况所做的功能扩展消费者&#xff08;无灰度&#xff09;…

Simulink对仿真数据进行FFT频谱分析

1 问题引入 在仿真阶段&#xff0c;经常会遇到有些仿真结果的数据需要进行频谱分析&#xff0c;如何快速便捷地操作&#xff0c;这里介绍其中一种简单的方法。主要利用 Simulink 中 Scope 显示的数据进行保存并进行 FFT 频谱分析&#xff0c;按下文操作即可。 2 实战 2.1 将…

Vue前端开发:gsap动画库

gsap它的全称是GreenSock Animation Platform&#xff0c;它是一个功能非常强大的动画平台&#xff0c;它可以对JavaScript操作的所有内容实现动画效果&#xff0c;同时&#xff0c;还解决了不同浏览器中存在的兼容性问题&#xff0c;而且速度和效率都非常快&#xff0c;全球超…

【layui】echart的简单使用

图表类型切换&#xff08;柱形图和折线图相互切换&#xff09; <title>会员数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a lay-href""&g…

[Redis] Redis缓存机制

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

绘制3D图

一个 3D 函数的表面图&#xff0c;其中包含向量场。 Python 代码示例&#xff0c;使用 matplotlib 和 numpy 库来绘制类似的图。 python 复制代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 生成网格 x np.linspace(-…