七步记忆法:

第一步:预习。

第二步:听课。

第三步:课间练习

第四步:下午或晚上练习(大量)

第五步:晚上睡觉前,回忆 (5分钟)

第六步:第二天早上。

第七步:每周总结。 

 

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

 

set1 = {'alex', [1,2], 1,2,3}#集合里元素不能是可变类型,也就是不能有列表和字典。
set1 = {'alex', 'wusir'}#直接创建

set2 = set({'alex', 'wusir'})#函数方式创建
print(set2)

 

可以被哈希的数据结构:intfloatstrtuple 和 NoneType

不可以被哈希的数据结构:dictlist 和 set

可哈希的值是指不变的,比如元组,字符串,字符,变量

 

面试必考:list去重  *****
l1 = [1,1,2,3,4,4,3,2,1,5,5]
set1 = set(l1)
l2 = list(set1)
print(l2)

 

其他方法后期奉上

 

set1 = {'alex','wusir','ritian','egon','barry'}

 

  增

set1.add('女神')
print(set1)
set1.update('abc') #迭代着增加
print(set1)  #{'ritian', 'b', 'a', 'alex', 'egon', 'c', 'barry', 'wusir', '女神'}


set1.remove('alex')
print(set1)
set1.pop()
print(set1)
set1.clear()
print(set1)
del set1
print(set1)

 

关系测试
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

 

交集 &  intersection
print(set1 & set2)
print(set1.intersection(set2))

 


并集 | union
print(set1 | set2)
print(set1.union(set2))


反交集 ^ symmetric_difference
print(set1 ^ set2)
print(set1.symmetric_difference(set2))


差集 - difference
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)
print(set1.difference(set2))

 

 子集 < issubset
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2)  # True
print(set1.issubset(set2))

 

超集 > issuperset
print(set2 > set1)
print(set2.issuperset(set1))

 


set1 = {1,2,3}
set3 = frozenset(set1)
print(set3)  # 不可变的数据类型。  ***

 

深浅COPY

赋值运算
l1 = [1,2,3]
l2 = l1
l1.append(666)
print(l2) #[1, 2, 3, 666]
print(id(l1)) #2034878407240
print(id(l2)) #2034878407240

 


浅copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)
print(l2)  #[1, 2, 3]

l1 = [1,2,3,[22,]]
l2 = l1.copy()
l1.append(666)
print(l1,l2) #[1, 2, 3, [22], 666] [1, 2, 3, [22]]

# l1[-1].append('taibai')
#print(l1,l2)
print(id(l1))  #1882012279432
print(id(l2))   #1882013504008
print(id(l1[-1])) #1882012505520
print(id(l2[-1])) #1882012279368

l1 = [1,2,3,[22,]]
l2 = l1.copy()
l1.append(666)
print(l1,l2) #[1, 2, 3, [22], 666] [1, 2, 3, [22]]

l1[-1].append('taibai') #append 不能同时用报错。print(l1,l2) #[1, 2, 3, [22, 'taibai']] [1, 2, 3, [22, 'taibai']]
print(id(l1))  #1882012279432
print(id(l2))   #1882013504008
print(id(l1[-1])) #1882012505520
print(id(l2[-1])) #1882012279368

 

 外边的列表2个是独立的,里面的某个元素都是共用的,相当于一个人有2套房子。里面的厅什么的都是共用。



深copy
import copy
l1 = [1,2,3,[22,]]
l2 = copy.deepcopy(l1)
print(l1,l2) #[1, 2, 3, [22]] [1, 2, 3, [22]]
#l1.append(666)
l1[-1].append(221)
print(l1) #[1, 2, 3, [22, 221]]
print(l2) #[1, 2, 3, [22]]

 


应用场景:面试会考,解释深浅copy

# 完全独立的copy一份数据,与原数据没有关系,深copy
# 如果一份数据(列表)第二层时,你想与原数据进行公用,浅copy。

面试题
切片属于浅copy
l1 = [1,2,3,[22,33]]
l2 = l1[:]
# l1.append(666)
l1[-1].append(666)
print(l2) #[1, 2, 3, [22, 33, 666]]

 


#把列表里  姓氏包含周的 删除 ,并打印列表 lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
for i in lst[:]:  #利用切片思维复制了浅拷贝了一份lst  来循环删除原lst
    if '' == i.strip()[0]:
        lst.remove(i)
print(lst)
浅copy妙用

 

 
 
 posted on 2022-03-14 12:52  编程之路任重道远  阅读(46)  评论(0)    收藏  举报