python数据类型之集合

1. 集合的定义

  • 集合里面的元素是不可重复的
s={0,1,2,8,4,5,6}
print(s,type(s))
s1={1}
print(s1,type(s1))
输出结果:
{0, 1, 2, 4, 5, 6, 8} <class 'set'>
{1} <class 'set'>
  • 定义一个空集合
s2={} #默认情况是字典dict
print(s2,type(s2))
s3=set({})
print(s3,type(s3))
输出结果:
{} <class 'dict'>
set() <class 'set'>

2. 集合的应用

  • 列表去重
li=[1,2,2,3,5,6,4,4]
print(list(set(li)))
输出结果:
[1, 2, 3, 4, 5, 6]

3. 集合的特性

  • 集和支持的特性只有 成员操作符(索引 切片 重复 连接 均不支持)
  • 成员操作符
s = {1,2,3}
print(1 in {1,2,3}) #True
print(1 not in s) #False
# for循环
for i in s:
    print(i,end=' ')
print()
print('~~~~~~')

for i,v in enumerate(s):
    print('index: %s,value:%s' %(i,v)))))
输出结果:
True
False
1 2 3 
~~~~~~
index: 0,value:1
index: 1,value:2
index: 2,value:3

4. 集合的常用方法

  • 并集
    并集有两种写法s1.union(s2))s1 | s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('并集:', s1.union(s2))
print('并集:', s1 | s2)
输出结果:
并集: {1, 2, 3, 4}
并集: {1, 2, 3, 4}
  • 交集
    交集有两种写法s1.intersection(s2))s1 & s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('交集:',s1.intersection(s2))
print('交集:',s1 & s2)
输出结果:
交集: {2, 3}
交集: {2, 3}
  • 差集
    可以理解为s1中有的而s2中没有的元素
    差集有两种写法s1.difference(s2))s1 - s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('差集:',s1.difference(s2)) # s1 - (s1&s2)
print('差集:',s2.difference(s1)) # s2 - (s1&s2)
print('差集:',s1-s2)
print('差集:',s2-s1)
输出结果:
差集: {1}
差集: {4}
差集: {1}
差集: {4}
  • 对等差分
    并集 - 交集
    有两种写法s1.symmetric_difference(s2))s1 ^ s2
s1 = {1, 2, 3}
s2 = {2, 3, 4}
print('对等差分:',s1.symmetric_difference(s2))
print('对等差分:',s1^s2)
输出结果:
对等差分: {1, 4}
对等差分: {1, 4}
  • 一个集合是否是另一个集合的子集
s3 = {1,2}
s4 = {1,2,3}
# s3是否为s4的子集
print(s3.issubset(s4))
输出结果:
True
  • 一个集合是否是另一个集合的超集
s3 = {1,2}
s4 = {1,2,3}
# s3是否为s4的超集
print(s3.issuperset(s4))
# s4是否为s3的超集
print(s4.issuperset(s3))
输出结果:
False
True
  • 两个集合是否不相交
s3 = {1,2}
s4 = {1,2,3}
# 两个集和是不是不相交
print(s3.isdisjoint(s4))
输出结果:
False

5. 集合的小练习

  • 问题:
    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
    他先用计算机生成了N个1~1000之间的随机整数(N<=1000),N是用户输入的,对于
    其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些
    数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作
  • 代码
s = set([])
for i in range(int(input('N:'))):
    s.add(random.randint(1,1000))
print(sorted(s))
  • 结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值