2020-09-03

tech2022-09-20  56

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)