Python

it2026-03-05  10

集合set

 集合是无序的,不重复的数据集合,里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希的(所以集合做不了字典的键)。

1、集合的创建。

三种方法:1、直接set()  只能创建一个元素且不能是 int,否则会报错

                   2、set({})可以随便创建

                   3、set = {}

set1 = set('a') set2 = set({'a', 1}) set3 = {1, 2, 'barry'} print(set1, type(set1)) print(set2, type(set2)) print(set3, type(set3)) {'a'} <class 'set'> {1, 'a'} <class 'set'> {1, 2, 'barry'} <class 'set'>

2、集合的增

1)、直接增加

set.app('a)

2)、迭代增加  update()

set.update('a')   注意:a会被分解成最小元素,分别添加

set1 = {'alex', 'wusir', 'ritian'} set1.add('女神') print(set1) set1.update('AB') print(set1) set1.update('老师') print(set1) set1.update([1,2,3]) print(set1) {'wusir', '女神', 'alex', 'ritian'} {'ritian', 'A', 'B', 'wusir', '女神', 'alex'} {'', 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'} {'', 1, 2, 3, 'ritian', 'A', '', 'B', 'wusir', '女神', 'alex'}

3、集合的删1)、set.remove('a')    删除指定元素,每次只能删除一个元素

2)、set.pop()         随机删除一个元素

3)、set.clear()       清空集合

4)、del set                  删除集合

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'} set1.remove('alex') # 删除一个元素 print(set1) set1.pop() # 随机删除一个元素 print(set1) set1.clear() # 清空集合 print(set1) {'ritian', 'barry', 'egon', 'wusir'} {'barry', 'egon', 'wusir'} set()

4、集合的其他操作

1)、交集  (&  或者  intersection)

set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} print(set1 & set2) print(set1.intersection(set2)) {'zx', 46, 55} {'zx', 46, 55}

2)、并集  (| 或者 union)

set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 89} print(set1 | set2 | set3) print(set1.union(set2)) {'qw', 8, 46, 78, 'as', 23, 55, 89, 'er', 'zx'} {'qw', 8, 46, 'as', 23, 55, 'zx'}

3)、差集  (- 或者 difference)set1 - set2  是求 set1 中不同于 set2 的元素

set2 - set1  是求 set2 中不同于 set1 的元素

set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 23} print(set1 - set2 - set3) print(set1.difference(set2)) print(set2.difference(set1)) {'as'} {'as', 23} {8, 'qw'}

4)、反交集     (^  或者 symmetric_difference)

set1 = {'as', 23, 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} set3 = {'er', 78, 46, 'zx', 23} print(set1 ^ set2 ^ set3) print(set1.symmetric_difference(set2)) print(set2.symmetric_difference(set1)) {'er', 8, 46, 78, 'as', 'zx', 'qw'} {8, 'as', 23, 'qw'} {8, 'as', 23, 'qw'}

5)、子集与超集 

set1 = { 'zx', 46, 55} set2 = {'qw', 55, 46, 'zx', 8} print(set1 < set2) print(set1.issubset(set2)) print(set2 > set1) print(set2.issuperset(set1)) True True True True

5、frozenset 不可变集合,让集合变成不可变类型1)、frozenset 转换的结果是最小元素的集合,但是可以转换 list ,然后编辑。(可以用来列表去重)

2)、frozenset 会将中间空格当成一个单个的元素生成。

s = frozenset('yang zhan') print(s) ({'y','a','n','g',' ','z','h'}) li = ['qw', 'as', 23, 'as', 23, 4] s = frozenset(li) print(s, type(s)) s1 = list(s) print(s) s1.remove(4) print(s1) frozenset({'qw', 'as', 4, 23}) <class 'frozenset'> frozenset({'qw', 'as', 4, 23}) ['qw', 'as', 23]

深浅copy

1、赋值运算

l1 与 l2 指向的是同一内存地址,他们完全是一样的。

l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = l1 l1[3][0] = 7 print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, [7, ['er'], 'w', 5]] 6771080 [1, 2, 4, [7, ['er'], 'w', 5]] 6771080

2、浅拷贝 copy对于浅 copy 来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一内存地址

,所有对于第二层以及更深的层数来说保持一致性。

l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = l1.copy() print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, ['a', ['er'], 'w', 5]] 6771080 [1, 2, 4, ['a', ['er'], 'w', 5]] 7154376

3、深拷贝 deepcopy深拷贝,两个完全独立的,改变任意一个的元素,无论多少层,两一个绝不改变。

import copy l1 = [1, 2, 4, ['a', ['er'], 'w', 5]] l2 = copy.deepcopy(l1) l1[3][0] = 7 print(l1, id(l1)) print(l2, id(l2)) [1, 2, 4, [7, ['er'], 'w', 5]] 8892680 [1, 2, 4, ['a', ['er'], 'w', 5]] 8894408

enumerate : 枚举 

enumerate : 枚举  ,对于一个可迭代的(iterable)/ 可遍历的对象(如 list、str),enumerate 将其组成一个索引序列,利用它可以同时获得索引和值。

li = ['电视', '电脑', '手机', '厨具'] for i in enumerate(li): print(i)for index,name in enumerate(li,1): print(index,name)for index,name in enumerate(li,10): print(index,name) (0, '电视') (1, '电脑') (2, '手机') (3, '厨具')1 电视 2 电脑 3 手机 4 厨具10 电视 11 电脑 12 手机 13 厨具

 

转载于:https://www.cnblogs.com/Chong-Yang/p/8086924.html

相关资源:数据结构—成绩单生成器
最新回复(0)