首页 > 编程语言 >Python3 元组

Python3 元组

时间:2024-10-14 16:50:53浏览次数:3  
标签:rhyme 元素 FishC 元组 each 所示 Python3

一、引入

元组是什么?它既能像列表一样容纳不同类型的元素,也拥有字符串不可变的特性,所以元组是退化的列表吗?

列表:[元素1, 元素2, 元素3, ... , 元素n]

元组:(元素1, 元素2, 元素3, ... , 元素n)

但事实上,元组的话可以不带小括号,只要用逗号隔开就行,如下所示:

>>> rhyme = (1, 2, 3, 4, 5, "上山打老虎")
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme = 1, 2, 3, 4, 5, "上山打老虎"
>>> rhyme
(1, 2, 3, 4, 5, '上山打老虎')

但是


二、元组的方法 

跟其他序列类型一样,元组也可以通过下标来获取元素,如下所示: 

>>> rhyme[0]
1
>>> rhyme[-1]
'上山打老虎'

 元组是不可变的,所以试图修改元组内的元素的行为是不可取的,如下所示:

>>> rhyme[1] = 10
Traceback (most recent call last):
  File "<pyshell#169>", line 1, in <module>
    rhyme[1] =10
TypeError: 'tuple' object does not support item assignment

元组也支持切片操作,因为切片是将目标对象中的元素以某种特定的组合导出,而非修改对象本身,如下所示:

>>> rhyme[:3]
(1, 2, 3)
>>> rhyme[3:]
(4, 5, '上山打老虎')
>>> rhyme[:]
(1, 2, 3, 4, 5, '上山打老虎')
>>> rhyme[::2]
(1, 3, 5)
>>> rhyme[::-1]
('上山打老虎', 5, 4, 3, 2, 1)
>>> 

 在前面,我们巧妙地将列表的方法分为“增”、“删”、“改”、“查”,但对于元组来说,就只剩下“查”字可讲了,如下所示:

>>> nums = (3, 1, 9, 8, 3, 5, 3)
>>> nums.count(3)
3
>>> heros = ("蜘蛛侠", "绿巨人", "黑寡妇")
>>> heros.index("黑寡妇")
2

拼接和重复两个运算符对于元组也是同样适用的,如下所示: 

>>> s = (1, 2, 3)
>>> t = (4, 5, 6)
>>> s + t
(1, 2, 3, 4, 5, 6)
>>> s * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)

 元组也可以嵌套,嵌套的方式就是直接加个逗号就可以了,逗号是构成元组的基本条件;元组同样支持迭代,对于嵌套的元组当然就要使用嵌套的循环(迭代),如下所示:

>>> w = s , t
>>> w
((1, 2, 3), (4, 5, 6))
>>> for each in s:
	    print(each)

	
1
2
3
>>> for i in w:
	    for each in i:
		        print(each)

		
1
2
3
4
5
6

 对于元组,我们也可以使用列表推导式来实现转化,但是将方括号改成小括号并不是想当然就变成了元组推导式,事实上,并不存在元组推导式这种东西,而是得到生成器(后续会详细讲解),如下所示:

>>> s = (1, 2, 3, 4, 5)
>>> [each * 2 for each in s]
[2, 4, 6, 8, 10]
>>> (each * 2 for each in s)
<generator object <genexpr> at 0x000001B261941F90>

三、如何生成只有一个元素的元组 

如何生成只有一个元素的元组?并不是单单在这个元素外面加个小括号就可以,还得在元素后面加个逗号,如下所示: 

>>> x = (520)
>>> x
520
>>> type(x)
<class 'int'>
>>> x = (520,)
>>> x
(520,)
>>> type(x)
<class 'tuple'>

四、元组的打包和解包

生成一个元组,我们有时候也称之为元组的打包, 那么,对应的把它们赋值给对应的变量名的行为我们称之为元组的解包,其实这种行为不仅适用于元组,也适用于任何的序列类型,如列表,如下所示:

>>> t = (123, "FishC", 3.14)
>>> x, y, z = t
>>> x
123
>>> y
'FishC'
>>> z
3.14
>>> t = [123, "FishC", 3.14]
>>> x, y, z = t
>>> x
123
>>> y
'FishC'
>>> z
3.14
>>> 

需要注意的是,无论是哪种类型序列的解包,赋值号左边的变量名数量必须等于右侧序列元素的数量 ,否则会报错,如下所示:

>>> a, b, c, d, e = "FishC"
>>> a
'F'
>>> b
'i'
>>> c
's'
>>> d
'h'
>>> e
'C'
>>> a, b, c = "FishC"
Traceback (most recent call last):
  File "<pyshell#224>", line 1, in <module>
    a, b, c = "FishC"
ValueError: too many values to unpack (expected 3)

 除非使用如下小技巧,后续也会讲解:

>>> a, b, *c = "FishC"
>>> a
'F'
>>> b
'i'
>>> c
['s', 'h', 'C']
>>> 

我们知道,python有一个引以为傲的技能就是多重赋值 ,其实呢它背后的实现逻辑就是,先通过元组进行打包,再讲元组进行解包,如下所示:

>>> x, y = 10, 20
>>> x
10
>>> y
20
>>> _ = 10, 20
>>> x, y = _
>>> x
10
>>> y
20
>>> 

那么,元组真的就固若金汤了吗?那倒未必,虽然元组中的元素是不可变的,但如果元组中的元素是指向一个可变的列表,那么我们依然是可以修改列表里的内容的,如下所示: 

>>> s = [1, 2, 3]
>>> t = [4, 5, 6]
>>> w = (s, t)
>>> w
([1, 2, 3], [4, 5, 6])
>>> w[0][0] = 0
>>> w
([0, 2, 3], [4, 5, 6])
>>> 

标签:rhyme,元素,FishC,元组,each,所示,Python3
From: https://blog.csdn.net/weixin_66366875/article/details/142917707

相关文章

  • python3.6 解析svg保存到mysql
     1importjson2fromcollectionsimportCounter3fromjsonimportJSONDecodeError45importmysql6importrequests7fromlxmlimportetree89#定义远程SVG文件的URL10file=r'D:\tmp_files\jmx\0919_3568.txt'11dat......
  • python3 log工具
    python3log工具logutil.py#-*-coding:utf-8-*-importos,sys,tracebackimportloggingfromlogging.handlersimportRotatingFileHandlerimportgetpassdefsingleton(cls):instances={}defget_instance():ifclsnotininstances:......
  • python3 mysql 连接
    python3mysql连接脚本#-*-coding:utf-8-*-#importMySQLdb,sys,osimportpymysqlasMySQLdb,sys,osimportos,sys,traceback#importMySQLdb.cursors#importmysql.connectordefsingleton(cls):instances={}defget_instance():ifcls......
  • centos7.6源码方式安装python3.6.8
    1安装依赖包centos7.6是没有自带python3的[root@opgs201~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@opgs201~]#python3bash:python3:commandnotfound...Similarcommandis:'python'先挂载iso文件,配置本地yum源##挂载虚拟机的光盘......
  • centos7 安装Python3及配置环境变量
    centos7安装Python3并配置环境变量亲测有效python官网(linux下载地址、版本可自选):https://www.python.org/ftp/python/一、添加阿里云第三方扩展源仓库(安装拓展源仓库才能安装yum安装openssl11openssl11-devel,python源码编译必须要openssl11或以上版本)备注,我这里是把pyhto......
  • 【编程小白必看】Python编程练习题元组操作秘籍一文全掌握
    【编程小白必看】Python编程练习题元组操作秘籍......
  • python3开头如何设置utf-8
    编码格式1:在源文件第一行或者第二行定义:# coding=<encoding name>例如:# coding=utf-8编码格式2:(这种最流行)格式如下:#!/usr/bin/python # -*- coding: <encoding name> -*-例如:#!/usr/bin/python # -*- coding: utf-8 -*-编码格式3:(如果使用......
  • python3数据库操作及ORM框架sqlalchemy使用
    sqlite3importsqlite3try:#连接到SQLite数据库,数据库文件是test.db,如果文件不存在,会自动在当前目录创建:conn=sqlite3.connect("test.db")#创建一个Cursorcursor=conn.cursor()#执行SQL语句cursor.execute("createtableuser(idva......
  • python3常用库之itertools使用
    无限迭代器importitertools#无限迭代器#无限序列只有在for迭代时才会无限地迭代下去,如果只是创建了一个迭代对象,它不会事先把无限个元素生成出来,事实上也不可能在内存中创建无限多个元素。natuals=itertools.count(1)odd=itertools.count(0,2)cs=itertools.cycl......
  • python3常用内置函数及常用库functools使用
    常用内置函数#lambda函数-----------------------------add=lambdaa,b,c:a+b+cprint(add(1,2,3))#6#sorted函数-----------------------------a_l=[1,3,5,7,0,-1,-9,-4,-5,8]print(sorted(a_l))#[-9,-5,-4,-1,0,1,3,5,7,8]p......