元组与集合
一、定义
Python内置的数据结构之一,是不可变序列
不可变序列:字符串、元组,没有增删改操作
可变序列:可以对序列进行增删改操作,对象地址不发生更改
lst = ['hello',98,'me'] print(lst) print(id(lst)) lst.append('sa') print(lst) print(id(lst)) s = 'boy' print(s,id(s)) s = s + 'girl' print(s,id(s))
结果:
['hello', 98, 'me']
2526617821768
['hello', 98, 'me', 'sa']
2526617821768
boy 2526619059064
boygirl 2526619887968
二、元组的创建方式
(1)第一种创建方式,使用()
(2)第二种创建方式,使用内置函数tuple()创建
t = ('you','are','so','nice') print(t,id(t)) d = 'you','are','so','nice' print(d,id(d)) s = tuple(('Python','world',98)) print(s,id(s))
结果:
('you', 'are', 'so', 'nice') 1901336727944
('you', 'are', 'so', 'nice') 1901336727944
('Python', 'world', 98) 1901336715128
(3)只包含一个元组的元素需要使用逗号和小括号
t = (10,) #逗号不能省,否则会被认为int类型
三、为什么要将元组设计成不可变序列?
增强对数据的保护,当多任务对同一内存数据读写时,只读方式,只能看,不能摸,相当于加速。
当元组中元素是不可变对象时,不能在引用其他对象
当元组中元素是可变对象时,则可变对象的引用不允许改变,但数据可以改变
四、元素的遍历
元组是可迭代对象,利用for... in循环遍历
t = ('you','are','so','nice') "'第一种使用索引遍历" print(t[0]) print(t[1]) print(t[2]) print(t[3]) "'for...in'" for item in t: print(item)
五、集合的概述与创建
与列表、字典一样都属于可变类型的序列
没有value
集合与字典相同,不允许重复,重复元素会去掉
集合中的元素是无序的
(1)集合的创建方式,使用{}
(2)使用内置函数set()
#集合 s = set(range(6)) print(s) print(set([3,2,2,21,1]))#集合是无序的 print(set('Python')) print(set({124,3,4,4,5})) d = set() print(d,type(d))
结果:
{0, 1, 2, 3, 4, 5}
{1, 2, 3, 21}
{'h', 'o', 't', 'n', 'y', 'P'}
{5, 3, 124, 4}
set() <class 'set'>
六、集合的相关操作
集合元素的判断操作 in not in
新增元素 调用add()方法,一次添加一个元素
调用update()方法至少添加一个元素
m = {10,203,0,30,40}
print(10 in m)
m.add(90)
print(m)
m.update({100,200})
m.update([9384,232,23])
m.update((89,45,231))
print(m)
结果:
True
{0, 40, 10, 203, 90, 30}
{0, 100, 231, 40, 200, 10, 203, 9384, 232, 45, 23, 89, 90, 30}
删除元素 调用remove()方法,一次删除一个指定元素,若指定元素不存在抛出keyerror
调用discard()方法,一次删除一个指定元素,若指定元素不存在不抛出异常
调用pop()方法,一次只删除一个任意元素 #不能指定参数,只能任意删除
调用clear()方法,清空集合
m = {10,203,0,30,40}
m.remove(10)
m.discard(1)
m.pop()
m.clear()
print(m)
七、集合间的关系
两个集合是否相等 == !=
一个集合是否是另一个集合的子集 issubset()
一个集合是否是另一个集合的超集 issuperset()
判断交集 isdisjoint()
交集操作 intersection() &
并集操作 union() |
差集操作 difference() -
对称差集 symmetric_difference()
八、集合生成式
{i*i for i in range(1,10) }
元组没有生成式
lst = [i*i for i in range(10)] print(lst) s = {i*i for i in range(10)} print(s)
结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
| 数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
| 列表(list) | 可变 | 可重复 | 有序 | 【】 |
| 元组(tuple) | 不可变 | 可重复 | 有序 | ( ) |
| 字典(dict) | 可变 |
key不可重复 value可重复 |
无序 | {key:value} |
| 集合(set) | 可变 | 不可重复 | 无序 | { } |

浙公网安备 33010602011771号