博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
04 Python数据类型之元组、集合
阅读量:1886 次
发布时间:2019-04-26

本文共 3941 字,大约阅读时间需要 13 分钟。

元组(Tuple)是任意对象的有序集合

元组与字符串和列表类似,是一个位置有序的对象的集合(也就是其内容维持从左到右的顺序)。与列表相同,可以嵌入到任何类别的对象中。

通过偏移存取 通过偏移而不是键来访问,例如可以使用索引,切片

属于不可变序列类型 不能在原处修改(因为他们是不可变的),但可以进行组合和复制,运算后会生成一个新的元素

创建空元祖

tup1 = ()

元组中只包含一个元素时,需要在元素后面添加逗号

tup1 = (50,)tup1
(50,)

元组与字符串类似,下标索引从0开始,可以进行截取,组合等。元组可以使用下标索引来访问元组中的值,如下实例:

tup1 = ("physics","chemistry",1997,2000)tup2 = (1,2,3,4,5,6,7)print("tup1[0]:",tup1[0])print("tup1[1:5]:",tup2[1:5])
tup1[0]: physicstup1[1:5]: (2, 3, 4, 5)

修改元组

元组与列表不同,元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下:

tup1 = (12,34.56)tup2 = ("abc","xyz")# 以下修改元组元素操作时非法的,会出现TypeError错误tup1[0] = 100
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)
in
3 4 # 以下修改元组元素操作时非法的,会出现TypeError错误----> 5 tup1[0] = 100TypeError: 'tuple' object does not support item assignment
# 创建一个新的元组tup3 = tup1 + tup2print(tup3)
(12, 34.56, 'abc', 'xyz')

删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,实例中元组被删除后,输出变量会有异常信息,如下:

tup = ("physics","chemistry",1997,2000)print(tup)
('physics', 'chemistry', 1997, 2000)
del tup# 元组已被删除,输出变量提示异常信息print(tup)
---------------------------------------------------------------------------NameError                                 Traceback (most recent call last)
in
----> 1 del tup 2 3 # 元组已被删除,输出变量提示异常信息 4 print(tup)NameError: name 'tup' is not defined

任意无符号的对象,以逗号隔开,默认为元组。如下:

print("abc",-4.24e93,18+6.6j,"xyz")x,y=1,2print("Value of x,y:",x,y)
abc -4.24e+93 (18+6.6j) xyzValue of x,y: 1 2

Python的元组数据类型包含更多的方法

tup.index(x,[start,[stop]]) 返回元组中start熬stop索引中第一个值为x的元素在整个列表中索引。如果没有匹配的元素就会返回一个错误

tup.count(x) 返回x在元组中出现的次数

cmp(tuple1,tuple2) 比较元组中两个元素

len(tuple) 计算元组中元素格式

max(tuple) 返回元组中元素最大值

min(tuple) 返回元组中元素最小值

tuple(seq) 将列表转换为元组

元组不提供字符串、列表和字典中的方法。如果相对元组排序,通常先得奖它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法

T = ("c","a","d","e")tmp = list(T)tmp.sort()print(tmp)print(tuple(tmp))
['a', 'c', 'd', 'e']('a', 'c', 'd', 'e')
T = ("c","a","d","e")# 按字母顺序排序sorted(T)
['a', 'c', 'd', 'e']

列表解析也可用于元组的转换

T = (1,2,3,4,5)L = [x+20 for x in T]L
[21, 22, 23, 24, 25]
T = (1,2,3,2,3,5,2)print(T.index(2))print(T.index(5,2,7))print(T.count(2))
153

集合

Python还包含一种数据类型set(集合)。集合是一个无序不重复元素的集。基本功能包括关系运算和消除重复元素。比如支持union(联合),interseion(交),difference(差)和sysmmetric difference(对称差集)等数学关系运算

大括号或set()函数可以用来创建集合。注:创建空集合,必须使用set()而不是{},后者用于创建空字典

所有集合方法

S.issubset(t) 如果s是t的子集,则返回True,否则返回False

S.issuperset(t) 如果s是t的超集,则返回True,否则返回False

S.unoin(t) 返回一个新集合,该集合是s和t的并集,也可用s1|s2,但不能用s1+s2

S.intersection(t) 返回一个新集合,该集合是s和t的交集,也可用s1&s2

S.difference(t) 返回一个新集合,该集合是s的成员,但不是t的成员,也不用s1-s2

S.symmetric_difference(t) 对称差分是集合的异或,返回一个新集合,该集合是s或t的成员,但不是s和t共用的成员,也可用s1^s2

S.copy() 返回一个新集合,该集合是s的复制

仅适合可变集合

S.update(t) 用t中的元素修改s,,即s现在包括s或t的城固uaun

S.intersection_update() s中的成员是共同属于s和t的元素

S.difference_update s中的成员是属于s但不包含在t中的元素

S.symmetric_difference_update s中的成员更新为那些包含在s或t中,但不是s和t共用的元素

S.add(obj) 在集合s中添加对象obj

S.remove(obj) 从集合s中删除对象obj,如果obj不是集合s中的元素将有错误

S.discard(obj) 如果obj是集合s中的元素,从集合s中删除对象obj

S.pop() 删除集合s中的任意一个对象,并返回它

S.clear() 删除集合s中的所有元素

basket = ["apple","orange","apple","pear","orange","banana"]fruit = set(basket)print(fruit)print("orange" in fruit)print("crabgrass" in fruit)
{'apple', 'pear', 'orange', 'banana'}TrueFalse
a = set("abracadabra")b = set('alacazam')# 唯一值print('a:\t',a)          # 在a不在b里面print('a - b:\t',a - b)# 在a或b里print('a | b:\t',a | b)# a、b里面都有print('a & b:\t',a & b)  # 在a或b里但是不同时在两个里面print('a>b,a
b,a
a:	 {'r', 'b', 'd', 'a', 'c'}a - b:	 {'r', 'd', 'b'}a | b:	 {'m', 'r', 'l', 'b', 'z', 'd', 'a', 'c'}a & b:	 {'a', 'c'}a>b,a

列表和字典不能嵌入到集合中,但是元组是可以嵌入的

S = set()S.add([1,2,3])
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)
in
1 S = set()----> 2 S.add([1,2,3])TypeError: unhashable type: 'list'
S.add((1,2,3))S
{(1, 2, 3)}
type(S)
set

转载地址:http://ydzdf.baihongyu.com/

你可能感兴趣的文章
功能更新!C 函数也能在 MicroPython 中被调用啦
查看>>
东软载波携ES32+RT-Thread走进海尔集团
查看>>
今晚8点直播预告:RT-Thread Studio等相关主题答疑
查看>>
Linux内核在中国大发展的黄金十年-写于中国Linux存储、内存管理和文件系统峰会十周年之际...
查看>>
物联网 20 年简史大揭秘!
查看>>
开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历
查看>>
珠联璧合!基于i.MX RT和RT-Thread的物联网云接入方案
查看>>
基于RTT-MicroPython制作自带BGM的新型肺炎晴雨表
查看>>
Arm宣布推出Cortex-M55核心和Ethos-U55 microNPU,瞄准低功耗Edge AI
查看>>
开源项目|RT-Thread 软件包应用作品:小闹钟
查看>>
在 RT-Thread Studio 上使用 RT-Thread Nano
查看>>
开源项目|软件包应用作品:通用物联网系统平台
查看>>
【经验分享】RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据)
查看>>
单片机里面的CPU使用率是什么鬼?
查看>>
推荐一个优质Linux技术公众号-作者都是一线Linux代码贡献者们哦
查看>>
RT-Thread 编程风格指南
查看>>
95后高校电子教师,软硬兼修有趣有料!
查看>>
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy
查看>>
Cache 的基本概念与工作原理
查看>>
装机量超亿台 RISC-V +IoT OS!中科蓝讯与RT-Thread战略合作,共推自主物联网生态发展
查看>>