day006-1 迈向大神之路

集合及深浅拷贝

补充

tuple 元祖 set 集合
循环删除列表中的元素

for i in lis:
del lis[lis.index(i)]
for i in range(len(lis)):
del list[i] #出错 因为每删除一个序号也会跟着改变

lis=[11,22,33,44,55]
for i in range(len(lis)-1,0-1,-1):
print(i)
del lis[i]
print(lis) ##本人写的

#小朋友写的

dic={'k1','v1','k2','v2'}
for  i in dic:
	if 'k' in i 
		del dic[i]
dic2={}
for  i in dic:
	if 'k' in i 
		dic1.setdefault(i,dic[i])
dic=dic1
课上老师精心优化
l=[]
for i  in dic:
	if ‘k’in i:
		l.append(i)
for i in l:
	del dic[i]
print(dic)   

元祖中 无 , 且一个元素 你该是什么就是什么

1. 集合

它里面的元素必须是不可变数据类型 无序性 不重复(去重)
{ } 无键值对 不能改
形式: s=set({1,2,3})

1.增加

  • set1.add(“王振”)
  • set1.update(a,b)

2. 删除

  • set1.pop() #随机删除 有返回值
  • set1.remove(‘a’)按照元素删除
  • set1.clear() #清空列表 set()
  • del set()

3. 查

for i in set1
print(i)

* 交集

set1&set2
set1.intersection(set2)

* 并集

set1|set2
set1.union(set2)

* 反交集

set1^set2
set1.symmetric.difference(set2)

* 差集 set1 独有的

set1-set2
set.difference(set2)

扫描二维码关注公众号,回复: 3639663 查看本文章

* 子集

set1<set2
set1.issubset(set2) true

* 超级

set2>set1
set2.issuperset(set1) true

li=[1,2,33,33,1] 去重复
mth:

set1=set(li)
print(set1)
li=list(set1)

frozenset 不可变数据类型
s=frozenset(“barry”)
遍历无序

2.深浅copy

  1. 先看赋值运算。

l1 = [1,2,3,[‘barry’,‘alex’]]
l2 = l1
l1[0] = 111
print(l1) # [111, 2, 3, [‘barry’, ‘alex’]]
print(l2) # [111, 2, 3, [‘barry’, ‘alex’]]

l1[3][0] = ‘wusir’
print(l1) # [111, 2, 3, [‘wusir’, ‘alex’]]
print(l2) # [111, 2, 3, [‘wusir’, ‘alex’]]
对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

  1. 浅拷贝copy。
l1 = [1,2,3,['barry','alex']]
l2 = l1.copy()
print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2593038941896
 
l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3]))  # [1, 2, 3, ['wusir', 'alex']] 1732315659016

对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

  1. 深拷贝deepcopy
import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)
print(l1,id(l1))  # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[1] = 222
print(l1,id(l1))  # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2))  # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[3][0] = 'wusir'
print(l1,id(l1[3]))  # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3]))  # [1, 2, 3, ['barry', 'alex']] 2915377167304

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

猜你喜欢

转载自blog.csdn.net/qq_35131055/article/details/83094769
今日推荐