2020-09-03

Python学习

集合:
python中set与dict类似,也是一组key的集合,但没有value。由于key无法重复,所以set中的元素都不相同。
需要注意的是key是不可变类型,即可以被哈希的值。

num = {}
print(type(num))
num = {1,2,3,4}
print(type(num))
<class 'dict'>
<class 'set'>

1.集合的创建
(1)先创建对象再加入元素
(2)在创建空集合的时候只能使用s = set(),因为s = {}创建的是空字典

a = set()
a.add('1')
a.add(2)
print(a)
{2, '1'}

(3)直接把一堆元素用花括号括起来,如果有重复的元素,则会直接被忽略掉

a = {'apple','banana','orange','pear','apple'}
print(a)
{'pear', 'banana', 'orange', 'apple'}

(4)使用set(value)工厂函数,把列表或元组转换成集合

a = ['apple','banana','orange','pear','apple']
b = ('apple','banana','orange','pear','apple')
c = set(a)
d = set(b)
print(c)
print(d)
{'apple', 'banana', 'pear', 'orange'}
{'apple', 'banana', 'pear', 'orange'}

(5)去掉列表中重复的元素

lst = [2,1,0,2,3,4,5,2,3,1]
temp = []
for item in lst:
    if item not in temp:
        temp.append(item)

a = set(lst)
print(lst)
print(temp)
print(a)
[2, 1, 0, 2, 3, 4, 5, 2, 3, 1]
[2, 1, 0, 3, 4, 5]
{0, 1, 2, 3, 4, 5}

从结果我们可以看出集合有两个特点:无序(unordered)和唯一
由于set存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中
2.访问集合中的值
(1)可以用len()内建函数得到集合的大小
(2)可以使用for把集合中的数据一个个读取出来。
(3)可以通过in 或 not in判断元素是否在集合中

set = {2,1,0,2,3,4,5,2,3,1}
print(len(set))
for item in set:
    print(item,end=',')
print()
print(5 in set)
print(0 not in set)
6
0,1,2,3,4,5,
True
False

3.集合的内置方法
(1)set.add(elmnt)给集合添加元素

set = {1,2,3}
set.add(0)
print(set)
{0, 1, 2, 3}

(2)set.update(set)用于修改当前集合,可以添加新的集合或元素到当前集合中,重复的会被忽略

set = {1,2,3}
set.update({3,4})
print(set)
{1, 2, 3, 4}

(3)set.remove(item)移除集合中的元素,若不存在,则会报错

set = {1,2,3}
set.remove(1)
print(set)
set.remove(4)
print(set)
{2, 3}
Traceback (most recent call last):
  File "D:/PC项目/dream/hello world.py", line 4, in <module>
    set.remove(4)
KeyError: 4

(4)set.discard(value)和remove方法类似,不同的是若元素不存在不会报错

set = {1,2,3}
set.discard(1)
print(set)
set.discard(4)
print(set)
{2, 3}
{2, 3}

(5)set.pop()随机移除一个元素

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

集合还可以做数学上的一些操作
(6)set.intersection(set1,set2…)返回集合的交集

set1 = {1,2,3}
set2 = {2,3,4}
set = set1.intersection(set2)
print(set)
{2, 3}

(7)set.intersection_uprate(set1,set2…)交集,但是会移除原始集合不重叠的元素

set1 = {1,2,3}
set2 = {2,3,4}
set1.intersection_update(set2)
print(set1)
{2, 3}

(8)set.union(set1,set2…)返回集合的并集

set1 = {1,2,3}
set2 = {2,3,4}
set = set1.union(set2)
print(set)
{1, 2, 3, 4}

(9)set1 | set2,返回两个集合的并集

set1 = {1,2,3}
set2 = {2,3,4}
set = set1|set2
print(set)
{1, 2, 3, 4}

(10)set.difference(set)返回集合的差集

set1 = {1,2,3}
set2 = {2,3,4}
set = set1.difference(set2)
print(set)
{1}

(11)set1 - set2,返回集合的差集

set1 = {1,2,3}
set2 = {2,3,4}
set = set1-set2
print(set)
{1}

(12)set.difference_update(set)集合的差集,无返回值

set1 = {1,2,3}
set2 = {2,3,4}
set1.difference_update(set2)
print(set1)
{1}

(13)set.symmetric_difference(set)返回集合的异或
(14)set1^set2返回集合的异或
(15)set.symmetric_difference_update(set)移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中

set1 = {1,2,3}
set2 = {2,3,4}
print(set1.symmetric_difference(set2))
print(set1^set2)
set1.symmetric_difference_update(set2)
print(set1)
{1, 4}
{1, 4}
{1, 4}

(16)set.issubset(set)判断集合是不是被其他集合包含,如果是返回True,否则返回False

set1 = {1,2,3}
set2 = {1,2,3,4}
set3 = {2,3,4}
print(set1.issubset(set2))
print(set1.issubset(set3))
True
False

(17)set1<=set2判断集合是不是被其他集合包含,如果是则返回True,否则返回False

set1 = {1,2,3}
set2 = {1,2,3,4}
set3 = {2,3,4}
print(set1<=set2)
print(set1<=set3)
True
False

(18)set.issuperset(set)判断集合是不是包含其他集合

set1 = {1,2,3}
set2 = {1,2,3,4}
set3 = {2,3,4}
print(set2.issuperset(set1))
print(set3.issuperset(set1))
True
False

(19)set1>=set2,同18

set1 = {1,2,3}
set2 = {1,2,3,4}
set3 = {2,3,4}
print(set2>=set1)
print(set3>=set1)
True
False

(20)set.isdisjoint(set)判断是不是不相交,不相交返回True

set1 = {1,2,3}
set2 = {1,2,3,4}
set3 = {4,5,6}
print(set1.isdisjoint(set2))
print(set1.isdisjoint(set3))
False
True

4.集合的转换

se = set(range(4))
li = list(se)
tu = tuple(li)
print(se,type(se))
print(li,type(se))
print(tu,type(tu))
{0, 1, 2, 3} <class 'set'>
[0, 1, 2, 3] <class 'set'>
(0, 1, 2, 3) <class 'tuple'>

5.不可变集合
Python提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。
(1)frozenset([iterable])返回一个冰冻的集合,冰冻后集合不能再添加或删除任何元素

a = frozenset(range(10))
b = frozenset('asddfsdfas')
print(a)
print(b)
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
frozenset({'d', 'f', 's', 'a'})

练习
(1)怎么表示只包含一个数字1的元组

tu = (1,)
print(tu[0],type(tu))
1 <class 'tuple'>

(2)创建一个空集合,增加{‘x’,‘y’,‘z’}三个元素

se = set()
se.add('x')
se.add('y')
se.add('z')
print(se)
{'z', 'y', 'x'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值