Python——集合

集合

1.定义:

        ①不同元素组成;②无序;③集合中元素必须是不可变类型

2.定义集合的两种方法:

       方法一:set()方法
       方法二:{}方法

3.举例:

(1)集合中元素为字符串时:两种方法都适用
#字符串
s=set('123456')
print(s)
#{'4', '5', '6', '2', '1', '3'}
s={'Alice','Bob','Candy'}
print(s)
#{'Alice', 'Candy', 'Bob'}等价于--->
s=set(['Alice','Bob','Candy'])
print(s)
#{'Alice', 'Candy', 'Bob'}
(2)集合中元素为数字时:只有{}方法适用
#数字
s={1,2,3,4,5,6}
print(s)
#{1, 2, 3, 4, 5, 6}

   而 set() 方法报错

'''
s=set(1)
print(s)
#报错'''
(3)集合中元素为列表时:只有set() 方法适用
#列表
s=set(['Alice','Bob',123])
print(s)
#{'Alice', 123, 'Bob'}

   而 {} 方法报错

'''
s={[123,456],[456,113]}
print(s)
#报错'''

4.对集合 s 进行添加、删除操作:

(1)添加—— s.add()
#添加
s={1,2,3,4,5,6,7}
#①添加字符串
s.add('s')
print(s)
#{1, 2, 3, 4, 5, 6, 7, 's'}

s={1,2,3,4,5,6,7}
s.add('3')
print(s)
{1, 2, 3, 4, 5, 6, 7, '3'}

#①添加集合中已经存在的数字
s={1,2,3,4,5,6,7}
s.add(3)
print(s)
#{1, 2, 3, 4, 5, 6, 7}
(2)删除:

随机删除:s.pop()
指定删除:s.remove()
指定删除元素在集合中不存在会报错:s.remove()
指定删除元素在集合中不存在但不会报错:s.discard()

#删除
s={'sb',1,2,3,4,5,6}
#①随机删
s.pop()
print(s)
#{2, 3, 4, 5, 6, 'sb'}

s={'sb',1,2,3,4,5,6}
#②指定删除
s.remove('sb')
print(s)
#{1, 2, 3, 4, 5, 6}

'''s={'sb',1,2,3,4,5,6}
#②删除元素不存在会报错
s.remove('hellol')
print(s)
#报错'''

s={'sb',1,2,3,4,5,6}
#②删除元素不存在不会报错
s.discard('sbbbb')
print(s)
#{1, 2, 3, 4, 5, 6}

5.集合的关系运算——交、并、差集:

引入:

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
python_and_linux_l=[]
for p_name in python_l:
    if p_name in linux_l:
        python_and_linux_l.append(p_name)
print(python_and_linux_l)
#['lcg', 'szw', 'lcg']  有重复元素出现

利用集合来求解:(已知两个集合 p_sl_s
交集:p_s.intersection(l_s)           或          p_s&l_s
并集:p_s.union(l_s)                      或          p_s | l_s
差集:p_s.difference(l_s)               或          p_s - l_s
           l_s.difference(p_s)               或          l_s - p_s
交叉补集:p_s.symmetric_difference(l_s)               或          p_s^l_s

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
#集合可以用来去重,只是得到的结果时无序的
p_s=set(python_l)
l_s=set(linux_l)
print(p_s,l_s)
#{'zjw', 'szw', 'lcg'} {'szw', 'sb', 'lcg'}

# 求交集
print(p_s.intersection(l_s))
print(p_s&l_s)
#{'lcg', 'szw'}

# 求并集
print(p_s.union(l_s))
print(p_s|l_s)
#{'szw', 'lcg', 'zjw', 'sb'}

# 求差集
print(p_s-l_s)
print(p_s.difference(l_s))
print(l_s-p_s)
print(l_s.difference(p_s))
#{'sb'}

# 交叉补集
print(p_s.symmetric_difference(l_s))
print(p_s^l_s)
#{'zjw', 'sb'}

注——其他用法:
①p_s=p_s-l_s    后得到的p_s 等价于    p_s.difference_update(l_s)

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s=set(python_l)
l_s=set(linux_l)
print(p_s,l_s)
#{'zjw', 'lcg', 'szw'} {'sb', 'lcg', 'szw'}
print('差集',p_s-l_s)
#差集 {'zjw'}
print(p_s)
#{'zjw', 'szw', 'lcg'}  此时并没有改变p_s的值
python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s=set(python_l)
l_s=set(linux_l)
print(p_s,l_s)
#{'zjw', 'lcg', 'szw'} {'sb', 'lcg', 'szw'}
p_s=p_s-l_s
print('差集',p_s)
#差集 {'zjw'}
print(p_s)
#{'zjw'}  此时已经改变了p_s的值

同理,使用 p_s.difference_update(l_s)

python_l=['lcg','szw','zjw','lcg']
linux_l=['lcg','szw','sb']
p_s=set(python_l)
l_s=set(linux_l)
print(p_s,l_s)
#{'zjw', 'lcg', 'szw'} {'sb', 'lcg', 'szw'}
p_s.difference_update(l_s)
print('差集',p_s)
#差集 {'zjw'}
print(p_s)
#{'zjw'}  此时已经改变了p_s的值

父、子集(已知两个集合s1s2
s1 是s2 的子集:s1.issubset(s2)
s1 是s2 的父集:s2.issuperset(s1)

s1={1,2}
s2={1,2,3}
print(s1.issubset(s2))#s1 是s2 的子集
# True
print(s2.issubset(s1))
# False
print(s2.issuperset(s1))#s1 是s2 的父集
# True

s1和s2是否交集:s1.isdisjoint(s2)

#s1和s2没有交集时,为True
s1={1,2}
s2={3,5}
print(s1.isdisjoint(s2))
#True

#s1和s2有交集时,为False
s1={1,2}
s2={2,3,5}
print(s1.isdisjoint(s2))
#False

④s1.add   与   s1.union   与   s1.update的区别

原始:

s1={1,2}
s2={1,2,3}
print(s1)
#{1, 2}

使用    s1.add

s1={1,2}
s2={1,2,3}
s1.add(1,2,3,4) 
print(s1)
#报错,s.add()只能一次添加一个值

使用    s1.union

s1={1,2}
s2={1,2,3}
s1.union(s2)  #union只是求了一个并集,但并未给s1
print(s1)
#{1, 2}

使用    s1.update
该方法可以更新多个值(插入集合,列表,元组)

s1={1,2}
s2={1,2,3}
s1.update(s2)
print(s1)
#{1, 2, 3}
s1={1,2}
#插入列表
s1.update((3,4,5))
print(s1)
#{1, 2, 3, 4, 5}
s1={1,2}
#插入元组
s1.update(['Alice',4,5])
print(s1)
#{1, 2, 4, 5, 'Alice'}

补充
(1)集合属于可变类型,但 frozenset() 方法可以定义不可变集合,该不可变集合没有添加以及删除方法了

s=frozenset('hello')
print(s)
#frozenset({'l', 'h', 'e', 'o'})

(2)使用集合对列表做简单去重

#在不考虑顺序的前提下对列表只做简单去重
names=['alex','alex','wupeiqi','Candy']
names=list(set(names))
print(names)
#['wupeiqi', 'Candy', 'alex']

6.总结:

       本章主要讲了Python中集合的操作,集合是可变类型,但可以通过frozenset() 方法让其变为不可变类型,上述文章对集合进行了添加 add()  和删除 pop() , remove() , discard() 操作,关系运算,有 &,|,-,^。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值