组合数据类型(集合)

组合数据类型包括集合类型及操作、序列类型及操作(元组类型和列表类型)、字典类型及操作

集合是多个元素的无序组合

集合类型与数学中的集合概念一致,数学中的集合是指具有某种特定性质的对象汇总而成的集体,其中组成集合的对象称为该集合的元素

集合元素之间无序,每个元素唯一,不存在相同元素。

集合元素不可更改,不能存在可变数据类型

列表、字典是可变数据类型,整型、浮点型、复数、字符串类型、元组类型等等是不可变数据类型。

集合用大括号{}表示,元素间用逗号分割。

建立集合类型用{ }或set( )

建立空集合类型,只能使用set(),{}不能创建空集合(不包含元素的{}创建的是空字典)

示例代码如下:

A={"python"}    #使用{}建立集合
B=set("python123") #使用set()建立集合,使得字符串中的每一个字符单独拆分,变成集合的一个元素
print("A={}\nB={}".format(A,B))

运行界面如下:

集合操作符:

(1)并集:S|T,返回一个新集合,包括在集合S和T中的所有元素

代码示例如下:

S={"python"}
T=set("python123")
A=S|T
print("S|T={}".format(A))

运行界面如下:

(2)差集 :S-T,返回一个新集合,包括在集合S但不在T中的元素

代码示例如下:

S={"python"}
T=set("python123")
A=S-T
print("S-T={}".format(A))

运行界面如下:

(3)交集 :S&T,返回一个新集合,包括在集合S和T中的元素

代码示例如下:

S={"python"}
T=set("python123")
A=S&T
print("S&T={}".format(A))

运行界面如下: 

(4)补集:S^T,返回一个新集合,包括在集合S和T中的非相同元素

代码示例如下:

S={"python"}
T=set("python123")
A=S^T
print("S^T={}".format(A))

运行界面如下:

(5)关系操作符:S<=T或S<T  返回True/False,判断S和T的子集关系

代码格式如下:

S={"python"}
T=set("python123")
A=S<=T
B=S<T
print("S<=T:{}\nS<T:{}".format(A,B))

运行界面如下:

(6)关系操作符:S>=T或S>T  返回True/False,判断S和T的包含关系

代码格式如下:

S={"python"}
T=set("python123")
A=S>=T
B=S>T
print("S>=T:{}\nS>T:{}".format(A,B))

运行界面如下: 

(7)增强操作符:S^=T 更新集合S,包括集合S和T中的非相同元素,用S和T补运算之后的结果来更新集合S元素

代码格式如下:

S={"python"}
T=set("python123")
S^=T
print("S^=T:{}".format(S))

运行界面如下: 

(8)增强操作符:S|=T 更新集合S,包括在集合S和T中的所有元素,用S和T并运算之后的结果来更新集合S元素

代码格式如下:

S={"python"}
T=set("python123")
S|=T
print("S|=T:{}".format(S))

运行界面如下: 

(9)增强操作符:S-=T 更新集合S,包括在集合S但不在集合T中的元素,用S和T差运算之后的结果来更新集合S元素

代码格式如下:

S={"python"}
T=set("python123")
S-=T
print("S-=T:{}".format(S))

运行界面如下:

 (10)增强操作符:S&=T 更新集合S,包括同时在集合S和集合T中的元素,用S和T交运算之后的结果来更新集合S元素

代码格式如下:

S={"python"}
T=set("python123")
S&=T
print("S&T:{}".format(S))

运行界面如下:

(11)X in S 判断S中元素X,X在集合S中,返回True,否则返回False

代码示例如下:

S={"python"}
T=set("python123")
a="p" in S
print("p in S={}".format(a))

运行界面如下: 

(12)X not in S 判断S中元素X,X在集合S中,返回True,否则返回False

代码示例如下:

S={"python"}
T=set("python123")
a="p" not in S
print("p not in S={}".format(a))

运行界面如下:

 (13)set(x) 将其他类型变量x转变为集合类型

代码示例如下:

s1=set([1,2,3])
print("T:{}".format(s1))

运行界面如图所示:

通过结果可知,我们将列表类型的s1转变成了集合类型。

遍历集合:

代码示例如下:

A={1,2,3,"rgf","ypl"}
for item in A:
    print(item,end=" ")
    

运行界面如下: 

异常类型传递:

代码示例如下:

A = {1, 2, 3,"rgf", "ypl"}
try:
    while True<3:
      print(A.pop(), end=" \n")
except KeyError as error:
    print("出错了,原因:",error)

运行界面如图所示: 

集合的常见方法:

(1)len()方法,返回集合s的元素个数。

代码示例如下:

A = {1, 2, 3,"rgf", "ypl"}
print(len(A))

运行界面如下:

(2)add()方法,向集合中添加元素。

代码示例如下:

A = {1, 2, 3,"rgf", "ypl"}
A.add("LOVE")
print(A)

运行界面如图:

 (3)remove()方法,删除集合中的元素x,若x不存在则抛出KeyError异常。

代码示例如下:

A = {1, 2, 3, "rgf", "ypl"}
A.remove(1)
print(A)y

运行界面如下: 

(4)discard()方法,删除集合中的元素x,若x不存在不做处理。

代码示例如下:

A = {1, 2, 3, 4, "rgf", "ypl"}
A.discard(1)
print(A)

运行界面如下:

(5)clear( )方法,清空集合

代码示例如下:

A = {1, 2, 3,4, "rgf", "ypl"}
A.clear()
print(A)

运行界面如图所示:

(6)copy()方法,复制集合,返回值为集合。

代码示例如下:

A = {1, 2, 3,4, "rgf", "ypl"}
B=A.copy()
print(B)

运行界面如图:

 

 (7)pop()方法,随机返回集合中的一个元素,同时删除该元素;若集合为空,则抛出KeyError异常。

代码示例如下:

A = {1, 2, 3, "rgf", "ypl"}
print(A.pop())
print(A)

运行界面如图:

(8)isdisjoint(),判断集合与集合T是否没有相同的元素,没有返回True,有则返回False。

代码示例如下:

A = {1, 2, 3,4, "rgf", "ypl"}
T={1,2,3,4,5}
print(A.isdisjoint(T))

运行界面如下:

集合推导式:

集合也可以利用推导式创建,集合推导式的格式与列表推导式的格式相似,区别在于集合推导式外侧为大括号“{}”,具体如下所示:

{exp for x in set if cond}         exp为数据,x为数据类型,set为使用的数据,cond为生成要求

以上格式中遍历的可以是集合或其他可迭代对象,利用集合推导式在列表ls的基础上生成只包含偶数元素的集合,示例代码如下:

ls=[1,2,3,4,5,6,7,8,9]
s={data for data in ls if data%2==0}
print(s)

运行界面如下:

 集合类型应用场景:

包含关系比较:

代码示例如下:

A = {1, 2, 3,"rgf", "ypl"}
a="p"  in {1, 2, 3,"rgf", "ypl"}
b="rgf"  in  {1, 2, 3,"rgf", "ypl"}
print("1 in A:{},5 in A:{}".format(a,b))

运行界面如下: 

数据去重:集合类型所有元素无重复

代码示例如下:

ls=["p","p","y","y",123]
s=set(ls)
print(s)

运行界面如图:

数据转换:

代码示例如下:

ls=["p","p","y","y",123]
s=set(ls)
lt=list(s)
print(lt)

运行界面如下:

由以上可知,我们通过set()将列表ls转变为集合类型,之后又通过list将集合s转变为列表lt进行输出。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值