第9讲 python集合

浅复制

浅复制,只能复制外层元素,嵌套的内层元素是不能被复制的
例如:
d = {‘a’:1,‘b’:2,‘c’:3,‘e’:4}
d2 = d.copy()
d2 = {‘a’: 1, ‘b’: 2, ‘c’: 3, ‘e’: 4}
#此时改变d[‘a’]的值,d2中的d2[‘a’]不会改变
d[‘a’]=10
print('d = ',d,id(d))
d = {‘a’: 10, ‘b’: 2, ‘c’: 3, ‘e’: 4} 2255134280224
print('d2 = ',d2,id(d2))
d2 = {‘a’: 1, ‘b’: 2, ‘c’: 3, ‘e’: 4} 2255134280296
#改变d[‘a’]的值,d2[‘a’]不受影响,d[‘a’] 和 d2[‘a’]的id值不同

d={‘a’:{‘name’:‘葫芦娃’,‘age’:20},‘b’:2,‘c’:3}
d2 = d.copy()
#改变d2 name的值
d2[‘a’][‘name’] = ‘黑猫警长’
print('d = ',d,id(d))
d = {‘a’: {‘name’: ‘黑猫警长’, ‘age’: 20}, ‘b’: 2, ‘c’: 3} 2255134281304
print('d2 = ',d2,id(d2))
d2 = {‘a’: {‘name’: ‘黑猫警长’, ‘age’: 20}, ‘b’: 2, ‘c’: 3} 2255134808248
#改变d2 name的值,d name的值跟着改变,说明d2 copy不了name,这说明d2是浅拷贝

1、集合简介

a、集合当中只能存储不可变的对象
b、集合中存储的对象是无序的(不是按照元素插入的循序保存的)
c、集合中的元素不能重复
d、集合只能添加不可变对象
e、使用set()将字典转换为集合时,只会包含字典中的键(key)

1.1 创建集合

使用{ }来创建集合
s = {10,2,3,4,5,6,2,3,3,4}
print(s,type(s ))
打印值:过滤掉了重复元素
{2, 3, 4, 5, 6, 10} <class ‘set’>

1.2 集合只能添加不可变对象,列表是可变对象,所以报错

s = {[1,2,3],[4,5,6]}
报错:
Traceback (most recent call last):
File “<pyshell#17>”, line 1, in
s = {[1,2,3],[4,5,6]}
TypeError: unhashable type: ‘list’

1.3 使用set()可以将序列和字典转换成为集合

s = set([1,2,3,4,5,1,2,3,4,5])
print(s,type(s ))
打印值:
{1, 2, 3, 4, 5} <class ‘set’>

使用set()将字典转换为集合时,只会包含字典中的键(key)
s = set({‘a’:‘1’,‘b’:‘2’,‘c’:‘3’})
print(s,type(s ))
打印值:
{‘b’, ‘a’, ‘c’}

1.4 使用set()字符串序列转换集合

s = set(‘python’)
print(s,type(s ))
打印值:
{‘y’, ‘p’, ‘t’, ‘h’, ‘o’, ‘n’} <class ‘set’>

1.5 集合不能通过索引访问,需要转换列表,才能通过索引访问

s = {‘a’,‘b’,‘c’,1,2,3}
print(s,type(s))
{1, 2, 3, ‘b’, ‘a’, ‘c’} <class ‘set’>
#通过索引访问集合报错
print(s[0])
Traceback (most recent call last):
File “<pyshell#28>”, line 1, in
print(s[0])
TypeError: ‘set’ object does not support indexing
转换列表访问
print(list(s)[0])
返回值:1

1.6 集合的使用 in 和 not in 检查集合当中的元素

s = {‘a’,‘b’,‘c’,1,2,3}
print(‘a’ in s)
返回:True

1.7 len

print(len(s))
返回:6

1.8 add

s = {‘a’,‘b’,‘c’,1,2,3}
s.add(10)
print(s)
返回:{1, 2, 3, 10, ‘b’, ‘a’, ‘c’}

1.9 update() 将一个集合当中的元素添加到当前集合中

s = {‘a’,‘b’,‘c’,1,2,3}
s2 = set(‘python’)
s.update(s2)
返回:{‘y’, 1, 2, 3, ‘p’, ‘t’, 10, ‘h’, ‘o’, ‘b’, ‘n’, ‘a’, ‘c’}

1.10 pop()

s = {‘a’,‘b’,‘c’,1,2,3}
s.pop()
pop()返回:‘c’
s = {2, 1, 3, ‘b’, ‘a’}

1.11 remove()删除集合中指定的元素

s.remove(1)
s = {2, 3, ‘p’, ‘t’, 10, ‘h’, ‘o’, ‘b’, ‘n’, ‘a’, ‘c’}

1.12 clear()清楚集合中的元素

s.clear()
s = set()

2、集合运算

2.1 & 交集运算符

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
result = s1 & s2
print(result)
返回值:{3, 4, 5}

2.2 | 并集运算

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
result = s1 | s2
print(result)
返回值:{1,2,3,4,5,6,7}

2.3 - 差集运算

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
result = s1 - s2
print(result)
返回值:{1,2}

2.4 ^ 亦或集 指的是集合里面不相交的部分

s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
result = s1 ^ s2
print(result)
返回值:{1,2,6,7}

2.5 <= 检查一个集合是否是另一个集合的子集

s1 = {1,2,3}
s2 = {1,2,3,4,5,6,7}
result = s1 <= s2
print(result)
返回值:True
s1集合是s2集合的子集,s2集合是s1集合的超集

2.6 < 检查一个集合是否是另一个集合的真子集

s1 = {1,2,3}
s2 = {1,2,3}
result = s1 < s2
print(result)
返回值:False

s1 = {1,2,3}
s2 = {1,2,3,4}
result = s1 < s2
print(result)
返回值:True

2.7 超集 和 真超集

= 检查一个集合是否是另一个集合的超集
检查一个集合是否是另一个集合的真超集
s1 = {1,2,3}
s2 = {1,2,3}
result = s1 > s2
print(result)
返回值:False

s1 = {1,2,3}
s2 = {1,2,3,4}
result = s2 > s1
print(result)
返回值:True

发布了31 篇原创文章 · 获赞 0 · 访问量 359

猜你喜欢

转载自blog.csdn.net/weixin_38027481/article/details/102622817