元组和集合

元组

pyhton内置的数据结构之一,是一个不可变序列,没有增删改操作。包括字符串和元组。

可变序列具有增删改操作,且经过该操作后,内存地址不发生更改。

创建方式

# 直接小括号,元素与元素之间用逗号分隔
t = ('hello','good','morning')
t2 = 'hello','good',10 # 小括号可以省略
print(t)
print(t2,type(t2))

# 使用内置函数tuple()
t=tuple(('hello','good','morning'))
print(t)

# 只包含一个元素的元组需要使用逗号和小括号
t=(10,) # 逗号不可省略,否则就是原数据类型
print(t)

# 空元组
t1=()
t2=tuple()
print(t1,t2)
('hello', 'good', 'morning')
('hello', 'good', 10) <class 'tuple'>
('hello', 'good', 'morning')
(10,)
() ()

原理

为什么要将元组设计成不可变序列?
在多任务环境下,同时操作对象时不需要加锁,因此,在程序中尽量使用不可变序列。

注意事项:元组中存储的是对象的引用

a)如果元组中对象本身不可对象,则不能再引用其他对象;

b)如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变

元组的遍历

# 元组是可迭代对象,可以使用for...in进行遍历
t = ('hello','good',100)
for item in t:
    print(item,type(item))
hello <class 'str'>
good <class 'str'>
100 <class 'int'>
# 可以根据索引提取元组元素
t = ('hello','good',100)
print(t[0])
hello

集合

python语言提供的内置数据结构,与列表、字典一样都属于可变的序列;集合是没有value的字典

创建方式

# 直接{}创建,元素与元素之间用逗号隔开
s = {'hello','good',100}
print(s,type(s))

s_1 = {1,2,3,4,4,5,6} # 集合中的元素不可重复
print(s_1)
{'good', 'hello', 100} <class 'set'>
{1, 2, 3, 4, 5, 6}
# 使用内置函数set()
s = set(range(5))
print(s,type(s))
s_1=set([1,2,3,4,5]) # 将列表转化为集合
s_2=set((1,2,3,4,67)) # 将元组转化为集合,集合是无序的
s_3=set(('python')) # 将转化为集合,集合是无序的
s_4=set({123,4,5,6,7}) # 将集合转化为集合,集合是无序的
print(s_1)
print(s_2)
print(s_3)
print(s_4)
{0, 1, 2, 3, 4} <class 'set'>
{1, 2, 3, 4, 5}
{1, 2, 67, 3, 4}
{'t', 'h', 'n', 'p', 'o', 'y'}
{4, 5, 6, 7, 123}
# 定义一个空集合
s_5 = set()
print(s_5,type(s_5))

s_6 = {}  # 创建的是空字典
print(s_6,type(s_6))
set() <class 'set'>
{} <class 'dict'>

相关操作

# 判断某元素是否在集合内,in / not in
s = set(range(5))
print(0 in s)
print(6 not in s)
True
True
# 新增元素

# 调用add()方法,一次添加一个元素
s = {1,2,3,4,5,6}
s.add(9)
print(s)
s.update({4,5,6,7,8}) # 重复的不加入,可添加列表/元组
print(s)

# 调用update()方法至少调价一个元素
{1, 2, 3, 4, 5, 6, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# 集合元素的删除操作
s = {1,2,3,4,5,6}

# 一次删除一个指定元素,若元素不存在则返回KeyError
s.remove(6) 
print(s)

# 调用discard()方法,一次删除一个指定元素,若元素不存在,不会报错
s.discard(99)
print(s)
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
# 调用pop()方法,一次只删除一个任意元素
s.pop()
print(s)
{2, 3, 4, 5}
# 调用clear()方法,清空集合
s.clear()
print(s)
set()

集合间的关系

# 两个集合是否相等,可以使用==或!=进行判断
s1 = {1,2,3,4}
s2 = {3,4,2,1}
print(s1==s2)
print(s1!=s2)
True
False
# 一个集合是否是另一个集合的子集,可以调用方法issubset进行判断
s1 = {1,2,3}
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s1.issubset(s2))
print(s3.issubset(s2))
True
False
# 一个集合是否是另一个集合的超集,可以调用方法issuperset进行判断
s1 = {1,2,3}
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s2.issuperset(s1))
print(s2.issuperset(s3))
True
False
# 两个集合是否没有交集,可以调用方法isdisjoint进行判断
s1 = {1,2,3}
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s1.isdisjoint(s3))
print(s2.isdisjoint(s3))
True
False

集合的数学操作

s2 = {1,2,3,4,5}
s3 = {7,5}

# 交集
print(s2.intersection(s3))
print(s2 & s3)
{5}
{5}
# 并集
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s2.union(s3))
print(s2|s3)
{1, 2, 3, 4, 5, 7}
{1, 2, 3, 4, 5, 7}
# 差集
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s2.difference(s3))
print(s2-s3)
print(s3.difference(s2))
print(s3-s2)
{1, 2, 3, 4}
{1, 2, 3, 4}
{7}
{7}
# 对称差集
s2 = {1,2,3,4,5}
s3 = {7,5}
print(s2.symmetric_difference(s3))
print(s2^s3)
{1, 2, 3, 4, 7}
{1, 2, 3, 4, 7}

集合生成式

s = {i**2 for i in range(10)}
print(s, type(s))
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25} <class 'set'>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值