Python 1-17 元组

news/2024/7/4 9:05:36

Python 1-17 元组

class tuple([iterable])

tuple 是一个不可变的序列类型。

>>> s = 'abc'
>>> l = [1,2]
>>> t = 1,2
>>> d = dict(a=1,b=2)
>>> set = {'a','b'}

1、元组创建

>>> tup = () # 创建空元组
>>> tup1 = (1, 2, 3, 4, 5 )
>>> tup2 = "a", "b", "c", "d" # 不需要括号也可以
>>> type(tup2) <class 'tuple'>
>>> list1 = ['Google', 'Taobao', 'Python', 'Baidu']
>>> tuple1 = tuple(list1)  # 实例化 tuple 类。
>>> tuple1 # ('Google', 'Taobao', 'Python', 'Baidu')

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
这是一种特殊情况,在实际操作中经常忘记添加逗号,尤其在传参的时候经常发生。

>>>tup1 = (50)
>>> type(tup1) # 不加逗号,类型为整型 <class 'int'>
>>> tup1 = (50,)
>>> type(tup1) # 加上逗号,类型为元组 <class 'tuple'>

2、删除元组

元组中的元素值是不允许删除的,但我们可以使用 del 语句来删除整个元组,如下实例:

tup = ('a', 'b')
del tup

3、元组运算符

与字符串一样,元组之间可以使用 + 号和 * 号进行运算。可以组合和复制,运算后会生成一个新的元组。

(1, 2, 3) + (4, 5, 6) # 连接
('Hi!',) * 4 # 复制
3 in (1, 2, 3)  # 元素是否存在
for x in (1, 2, 3): print (x) # 迭代

4、元组索引,截取

因为元组也是一个序列,所以可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

>>> L = ('a', 'b', 'c')
>>> L[2] 
'c'
>>> L[-2]
'b'
>>> L[1:]
('b', 'c')

5、Python 内置函数

len(tuple) # 计算元组元素个数。
max(tuple) # 返回元组中元素最大值。
min(tuple) # 返回元组中元素最小值。

6、装包与解包

a, b, c = 1, 2, 3
t =  1, 2, 3 # 装包
print(type(t)) # <class 'tuple'>
a, b, c = t # 解包
print(t,a,b,c) # (1, 2, 3) 1 2 3
a,b = input().split() # 需求输入以空格分割
l=list('123456')
print(l)
for i in l:
    print(i,type(i)) # '1' ...

for i in range(len(l)):
    print(i,l[i]) 
    if l[i]=='3':y=i

for x in enumerate(l):
    print(x)

for x,y in enumerate(l):
    print(x,y)

7、元组是不可变的对象

>>> tup = ('p', 'y', 't', 'h', 'o', 'n')
>>> tup[0] = 'g'     # 不支持修改元素
TypeError: 'tuple' object does not support item assignment
>>> id(tup)     # 查看内存地址
4440687904
>>> tup = (1,2,3)
>>> id(tup)
4441088800    # 内存地址不一样了

重新赋值的元组 tup,绑定到新的地址,而不是原地修改。
适合用元组,比如主机地址和端口(ip,port),(“192.168.1.1”, 80),两者捆绑在一起,不允许修改。
因为 tuple 不可变,所以代码更安全,尽可能用 tuple 代替 list。

元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变!

>>> tup = ('a', 'b', ['A', 'B'])
>>> tup[2][0] = 'X'
>>> tup[2][1] = 'Y'
>>> tup 
('a', 'b', ['X', 'Y'])

这个 tuple 定义的时候有3个元素,分别是 ‘a’,‘b’ 和一个 list。不是说 tuple 一旦定义后就不可变了吗?
当我们把 list 的元素 ‘A’ 和 ‘B’ 修改为 ‘X’ 和 ‘Y’ 后,tuple 变为:(‘a’, ‘b’, [‘X’, ‘Y’])。

表面上看,tuple 的元素确实变了,但其实变的不是 tuple 的元素,而是 list 的元素。tuple 一开始指向的 list 并没有改成别的 list,所以,tuple 所谓的“不变”是说,tuple 的每个元素,指向永远不变。即指向 ‘a’,就不能改成指向 ‘b’,指向一个 list,就不能改成指向其他对象,但指向的这个 list 本身是可变的!

理解了“指向不变”后,要创建一个内容也不变的 tuple 怎么做?那就必须保证 tuple 的每一个元素本身也不能变。
在使用元组的时候,请尽量使用数字、字符串和元组这种不可变的数据类型作为元组的元素,这样就能确保元组不发生变化。


http://www.niftyadmin.cn/n/3390066.html

相关文章

学习委员工作总结

工作总结 辞别盛夏&#xff0c;伴着金秋的碎步&#xff0c;走进了郑州大学的校园。这是一个陌生的环境&#xff0c;这是一个新的起点&#xff0c;这又是一个奋斗历程的开始。回望近一年的学习生活&#xff0c;有收获&#xff0c;有喜悦在这一年的工作和学习中&#xff0c;我的处…

insight-6.8调试工具安装

错误信息&#xff1a; qiangLinuxSir:~$ sudo arm-elf-insight Tk_Init failed: Cant find a usable tk.tcl in the following directories: /usr/local/share/tk8.4 /usr/local/lib/tk8.4 /usr/lib/tk8.4 /usr/local/library /usr/library /usr/tk8.4.1/library /tk8.4…

技术成就梦想【我与51CTO的故事】

最初与51CTO结缘是在2009年的年初&#xff0c;我搜索一篇关于exchange 2003 OWA更改密码的文章&#xff0c;这一搜不当紧&#xff0c;搜了一个技术大牛出来&#xff0c;而这个技术大牛就是当时我们学校的陈宣宋老师&#xff0c;而我们的陈老师竟然是在51CTO上写博客&#xff0c…

Ubuntu下编译insight错误解决

错误&#xff1a; cc1: warnings being treated as errors .././gdb/cli/cli-cmds.c: In function ‘pwd_command’: .././gdb/cli/cli-cmds.c:323: error: ignoring return value of ‘getcwd’, declared with attribute warn_unused_result make[2]: *** [cli-cmds.o] 错误…

Python 1-18 字典

Python 1-18 字典 Python 的字典数据类型采用键值对 (key:value) 的形式&#xff0c;根据 key 的值计算 value 的地址&#xff0c;具有非常快的查取和插入速度。 例如&#xff0c;用 list 实现成绩单&#xff1a; # 给定一个名字&#xff0c;要查找对应的成绩&#xff0c;就…

30个linux系统监控命令

原文网址:https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html 30 Linux System Monitoring Tools Every SysAdmin Should Know last updated January 8, 2018 in CategoriesCentOS, Debian Linux, Howto, Linux, Monitoring,Networking, RedHat/Fedora Linux, …

压缩编码M-JPEG、MPEG4、H.264

M-JPEG、MPEG4、H.264 压缩方式是网络 视频 服务器和网络摄像机 的核心技术 &#xff0c;压缩方式很大程度上决定着图像的质量、压缩比、传输 效率、传输速度等性能&#xff0c;它是评价网络视频服务器和网 络摄像机性能优劣的重要一环。随着多媒体技术的发展 &#xff0c;相…

年月日三联动下拉框

<HTML> <HEAD> <title>年月日三联动下拉框</title> <meta http-equivContent-Type contenttext/html; charsetgb2312> <meta nameauthor contenthttp://singlepine.cnblogs.com/> </HEAD> <body&g…