python中无序集合体类型包括_python 数据类型 之 集合

集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合

集合的三个特性:

1.确定性 (element必须可hash,不可变类型是可hash的)

2.互异性(集合中element 不能重复)

3.无序性(集合中没有先后之分,例如集合:{3,4,6}  等于{6,4,3})

#集合的存在意义在于去重和关系运算

集合的定义:

st = set(‘hello‘)

lis = list(‘hello‘)

print(st)

# {‘h‘, ‘o‘, ‘l‘, ‘e‘}

print(lis)

# [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]

# 【注意】

dic={}#空花括号{},代表定义字典

print(‘dic type:%s‘%type(dic))

>>:dic type:

st = {‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘}#定义的时候集合内出现了重复的项,但是并没有报错,只是剔除了重复element

print(st)

# {‘h‘, ‘o‘, ‘l‘, ‘e‘}

1)集合是无序的, 不重复的数据类型;

2)因此不支持索引,也不支持切片;也不支持重复;也不支持连接;

3)支持成员操作符;

4)支持for循环;

# print(type(set([i for i in range(0, 9)])))

lis = [i for i in range(0, 9)]

d = {}.fromkeys(lis)

# print(type(d))

# print(d)

# print(d.keys())

# for key in d.keys():

# print(key)

st = set([i for i in range(0, 3)])

# print(‘st type:%s st:%s‘ % (type(st), st))

# st type: st:{0, 1, 2}

# 增加 element

st.add(‘new element‘)

st2 = {9, 8, 7, }

#更新

st.update(st2) # 可以看成集合的凭接吗

st.update(‘t‘) # 单个元素,或者是集合本身也可以进行拼接

# st.add({‘b‘, ‘y‘}) # 报错 TypeError: unhashable type: ‘set‘

# print(st)

# 查找 element

s1 = set({i for i in range(1, 8)})

s2 = set({i for i in range(6, 10)})

# 交集

# print(s1 & s2) # {6, 7}

# print(s1.intersection(s2)) # {6, 7}

# s1.intersection_update(s2)

# print(s1) # {6, 7}

# 并集

# print(s1 | s2)# {1, 2, 3, 4, 5, 6, 7, 8, 9}

# print(s1.union(s2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}

# 差集

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

# print(s2 - s1)# {8, 9}

#st.difference(s2)

#

# #对等差分 [取反 交集]

# print(s1 ^ s2) #{1, 2, 3, 4, 5, 8, 9}

#超集和子集

boys = {‘zzy‘,‘yqw‘,‘dw‘,‘wzc‘,‘lyb‘,‘wym‘,‘chy‘}

zoudu = {‘wzc‘,‘lyb‘,‘wym‘}

girls = {‘lsy‘,‘mmf‘,‘syj‘}

#issuperset() 检测当前集合是否是另一个集合的超集

result = boys.issuperset(zoudu)

print(result)

#issubset() 检测当前集合是否是另一个集合的子集

result = zoudu.issubset(boys)

print(result)

#isdisjoint() 检测2个集合是否不存在交集 存在交集 False

result = boys.isdisjoint(girls)

print(result)

# 删除

# print(st)

# print(len(st))

st.remove(‘new element‘)#删除指定的元素,不存在报错

st.remove(2)

# print(st.pop())#随机删除并且返回集合中某个值

# print(st.pop())

# print(st.pop())

# print(st.pop())

# print(st.pop())

# print(st.pop())

# print(st.pop())#假如集合没有元素了,会报错 KeyError: ‘pop from an empty set‘

st.discard(3)

st.discard(3)#删除指定元素 假如元素不存在 不会报错

#清空集合

st.clear()

#赋值集合

new_st =st.copy()

print(st)

dic = {k: v for k, v in enumerate(range(2, 6))}

# {0, 1, ‘t‘, 7, 8, 9}

print("dic type:%s dic value:%s" % (type(dic), dic))

# dic type: dic value:{0: 2, 1: 3, 2: 4, 3: 5}

print(‘dic.pop:%s‘ % dic.pop(2)) # dic.pop:4

成员检测:

result_in = 2 in st

result_not = 2 not in st

print(result_in)

print(result_not)

集合推导式:

st_1 = { key_value for key_value in range(2,8) }

带有判断的集合推导式

st_2 = { key_value for key_value in range(2,17) if (key_value%2)==1 }

#冰冻集合

#冰冻集合是一种特殊的集合类型,也是集合(集合是列表的话,冰冻集合就是元组)

#创建冰冻集合

#一般不会创建空的冰冻集合

var = frozenset()

print(var,type(var))

#带有数据的冰冻集合

var = frozenset((‘qs‘,‘szx‘,‘bjh‘,‘acs‘))# 不可变集合

print(var,type(var))

#成员检测

result = ‘szx‘ in var

print(result)

#遍历冰冻集合

for i in var:

print(i)

#集合推导式(无法得到冰冻集合,可以得到集合,列表,元组,字典类型)

result = {i for i in var}

print(result,type(result))

#函数

#冰冻集合可以使用集合的函数(不修改集合本身的函数都可以使用)

var = frozenset((‘qs‘,‘szx‘,‘bjh‘,‘acs‘))

#copy()

result = var.copy()

print(result)

#集合操作 交集,并集,差集,对称差集等 不修改冰冻集合本身就能使用:冰冻集合的操作结果都是冰冻集合

var1 = frozenset((‘qs‘,‘szx‘,‘bjh‘,‘acs‘))

var2 = {‘szx‘,‘bjh‘,‘lc‘,‘wb‘}

#冰冻集合操作

result = var1.union(var2)

print(result)

#普通集合操作(冰冻集合是参考集合)

result = var2.union(var1)

print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值