Python 集合

概念

无序的,不可随机访问的,不可重复的元素集合
与数学中的集合概念类似,可对其进行交,并,差,补等逻辑运算
分为可变集合和非可变集合,set为可变,frozenset为不可变集合,无法修改。

定义

可变集合

s = {1, 2, 3}
s = set('abc')
s = set([1, 2, 3])
s = set((1, 2, 3)))
print(s, type(s))

{1, 2, 3} <class ‘set’>
集合推导式:

s = set(x for x in range(10))
print(s, type(s))

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class ‘set’>

不可变集合

fs = frozenset('abc')
print(fs, type(fs))

frozenset({‘b’, ‘c’, ‘a’}) <class ‘frozenset’>
集合推导式:

fs = frozenset(x ** 2 for x in range(1,10) if x % 2 == 0)
print(fs, type(fs))

frozenset({16, 64, 4, 36}) <class ‘frozenset’>

  • 创建空集合:
    s = set()
    s = frozenset()
  • 集合的元素必须是可哈希的值。即不可变类型。
  • 如果集合中的元素值出现重复,则会被合并为1个。
    集合可以用于列表去重。
l = [1, 2, 2, 3, 3]
s = set(l)
result = list(s)

可变集合增

s = {1, 2, 3}
s.add(4)
print(s,type(s))

{1, 2, 3, 4} <class ‘set’>

可变集合删

s.remove(element)

删除set中的一个元素,如果没有则返回错误

s = {1, 2, 3}
result = s.remove(3)
print(result, s)

s.discard(element)

删除set中的一个元素,如果没有则do nothing

s.pop()

随机删除并返回集合的一个元素,若集合为空,则返回一个错误。

s = {1, 2, 3}
result = s.pop()
print(result, s)

1 {2, 3}

s.clear()

清空集合中的所有元素

s = {1, 2, 3}
result = s.clear()
print(result, s)

None set()

可变即不可变集合 查

for v in s:

使用迭代器:

s = {1, 2, 3}

its = iter(s)
# print(next(its))

for v in its:
    print(v)    

1
2
3

交集

可变与不可变集合混合运算,返回结果类型以运算符左侧为主。

intersection(Iterable)

s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1.intersection(s2)
print(result, type(result))

{4, 5} <class ‘set’>

逻辑&

s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1 & s2
print(result, type(result))

{4, 5} <class ‘set’>

intersection_update

交集计算完毕后会再次赋值给原对象

s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1.intersection_update(s2)
print(result, type(result))
print(s1,s2)

None <class ‘NoneType’>
{4, 5} {4, 5, 6}

交集为iterable

s1 = {'1', '2', '3', '4', '5'}
result = s1.intersection('123')
print(result, type(result))

{‘1’, ‘3’, ‘2’} <class ‘set’>

并集

union

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.union(s2)
print(result, s1)

{1, 2, 3, 4, 5} {1, 2, 3}

逻辑 |

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1 | s2
print(result, s1)

{1, 2, 3, 4, 5} {1, 2, 3}

update

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.update(s2)
print(result, s1)

None {1, 2, 3, 4, 5}

差集

difference

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.difference(s2)
print(result, s1)

{1, 2} {1, 2, 3}

-

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1 - s2
print(result, s1)

{1, 2} {1, 2, 3}

difference_update

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.difference_update(s2)
print(result, s1)

None {1, 2}

判定

两个集合不相交

s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.isdisjoint(s2)
print(result)

False

一个集合包含另一个集合

s1 = {1, 2, 3}
s2 = {1,2}
result = s1.issuperset(s2)
print(result)

True

一个集合包含于另一个集合

s1 = {1, 2, 3}
s2 = {1,2}
result = s2.issubset(s1)
print(result)

True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值