Python数据类型 — 集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
s = set ([3, 5, 9, 10])  # 创建一个数值集合
t = set ("Hello")  # 创建一个唯一字符的集合

a = t | s  # t 和 s的并集
b = t & s  # t 和 s的交集

c = t - s  # 求差集(项在t中,但不在s中)
d = t ^ s  # 对称差集(项在t或s中,但不会同时出现在二者中)

基础功能

List = [1,2,5,6,8]
List = set(list)  # 把list设置为集合;只要设置为集合,则会自动去重;

xx = set(('apple','pear'))  # 创建一个含有多个元素的集合
print(xx)

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)   # 这里演示的是去重功能

# 增
basket.add('Love')  # 集合中没有insert;
basket.update('Aa','Bb')  # 参数可以是列表,元组,字典
basket.update( {"字符串"} )  # 将字符串添加到集合中。
basket.update( "字符串" )  # 将字符串拆分单个字符后,然后再一个个添加到集合中,有重复的会忽略。

# 删
#basket.remove('Aa')  # 如果元素不存在,则会发生错误
basket.discard("Aa")  # 如果元素不存在,不会发生错误discard,丢弃;
basket.pop()  # 随机删除一个元素
basket.clear()  # 清空集合


# 查
print(len(basket))  # 返回集合的长度

# 判断
print('a' in basket)  # 'a' not in basket

集合操作

s = set([1,3,5,7])
t = set([2,3,4,5])

# 集合的并集
print(t | s)  # t和s的并集
print(t.union(s))

# 集合的交集
print(set1.intersection(set2))
print(set1 & set2)
print(set1.isdisjoint(set2))  # 判断两个集合是否有交集,有则返回true;没有则返回false

# 集合的差集(补集)
print(set1.difference(set2)) #set1里有,set2里没有
print(set1-set2)
print(set2.difference(set1)) #set2里有,set1里没有
print(set2-set1)

# 集合的对称差集
print(set1.symmetric_difference(set2))#我有你没有的  加上 你有我没有的
print(set1^set2)

# 集合的子集
set3=set([4,5])
print(set3.issubset(set1))    #判断set3是否为set1的子集
print(set1.issuperset(set3))  #判断set1是否包含set3

集合遍历

# 集合遍历
# 注意:set没有索引!

for index,i in enumerate(set7):  //遍历
    print(index,i)

集合生成式

语法:{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式。

# 集合元素的唯一性
tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)
# 输出:{16, 4, 36}

# 集合元素的无序性
dictdemo = {'1':1,'2':2,'3':3}
setnew = {x for x in dictdemo.keys()}
print(setnew)
# 输出:{'2', '1', '3'}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值