Python学习随记-set

set

  • 概述:类似dict,是一组key的集合,不存储value
  • 本质:无序和无重复元素的集合

创建

  • 创建set需要一个list或者tuple或者dict作为输入集合
  • 重复元素在set中自动被过滤
# list
s1 = set([1, 2, 3])
# tuple
s2 = set((5, 6, 7))
# dict
s3 = set({"mfq": 24, "zhx": 23})

print(s1)
print(type(s1))
print(s2)
print(type(s2))
print(s3)
print(type(s3))

s4 = set([1, 2, 3, 1, 2, 4])
print(s4)

'''结果为:
{1, 2, 3}
<class 'set'>
{5, 6, 7}
<class 'set'>
{'zhx', 'mfq'}
<class 'set'>
{1, 2, 3, 4}
'''

添加

方式1:set.add()

s1 = set([1, 2, 3])
print(s1)

s1.add(4)
print(s1)

# 可以添加重复的,但是无效果
s1.add(3)
print(s1)

# 报错,因为set存储的key,key是不可变的,而list是可变的,所以set不能添加list;同理dict也不可以被添加
# s1.add([5, 6, 7])

# 元组是不可变的,所以可以添加成功
s1.add((8, 9, 0))
print(s1)

'''结果为:
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 3, 4, (8, 9, 0)}
'''

方式2:set.update()

s1 = set([1, 2, 3])
print(s1)

# 插入整个list、tuple、字符串,打碎插入
s1.update([4, 5, 6])
print(s1)
s1.update((7, 8))
print(s1)
# 也展示出set的无序性
s1.update("you are a good man")
print(s1)
s1.update({"mfq": 23})
print(s1)

'''结果为:
{1, 2, 3}
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3, 4, 5, 6, 7, 8, 'e', 'g', 'r', ' ', 'n', 'm', 'd', 'o', 'u', 'a', 'y'}
{1, 2, 3, 4, 5, 6, 7, 8, 'e', 'g', 'mfq', 'r', ' ', 'n', 'm', 'd', 'o', 'u', 'a', 'y'}
'''

删除

s1 = set([1, 2, 3])
print(s1)

s1.remove(2)
print(s1)

'''结果为:
{1, 2, 3}
{1, 3}
'''

遍历

  • 注意:set是没有索引的
s1 = set([1, 2, 3, 4, 5])

for i in s1:
    print(i)

# 伪索引
for index, data in enumerate(s1):
    print(index, data)

'''结果为:
1
2
3
4
5
0 1
1 2
2 3
3 4
4 5
'''

交集&、并集|

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])

# 交集
s3 = s1 & s2
print(s3)
print(type(s3))

# 并集
s4 = s1 | s2
print(s4)
print(type(s4))

'''结果为:
{4, 5}
<class 'set'>
{1, 2, 3, 4, 5, 6, 7, 8}
<class 'set'>
'''

类型转换

  • list—>set
  • tuple—>set
  • set—>list
s1 = {1, 2, 3, 4, 5}
print(s1)

list1 = list(s1)
print(list1)

'''结果为:
{1, 2, 3, 4, 5}
[1, 2, 3, 4, 5]
'''
  • set—>tuple
s1 = {1, 2, 3, 4, 5}
print(s1)

tuple1 = tuple(s1)
print(tuple1)

'''结果为:
{1, 2, 3, 4, 5}
(1, 2, 3, 4, 5)
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值