0
点赞
收藏
分享

微信扫一扫

循环删除列表/字典中的每一个元素及“深浅拷贝”

奋斗De奶爸 2022-04-26 阅读 62
python

 一、列表元素中的删除

li = [1,2,3,4]
for i in li:
    li.remove(i)

print(li)   # 打印[2, 4]
# 使用del
li = [11, 22, 33, 44]
for i in range(0, len(li)):
    del li[i]
print(li)   # 报错
#
# pop
for el in li:
 li.pop() # pop也不⾏
print(li) #  [11, 22]

# remove
for e in li:
 li.remove(e)
print(li)   # 结果为[22, 44]

 二、字典(dict)元素删除

dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
# 删除key中带有'k'的元素
for k in dic:
    if 'k' in k:
        del dic[k] #报错 dictionary changed size during iteration, 在循环迭代的时候不允许进⾏删除操作
print(dic)

 那怎么办呢? 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

dic = {'k1': 'bab', 'k2': 'w', 's1': '⽼板'}
dic_list = []
# 删除key中带有'k'的元素
for k in dic:
    if 'k' in k:
        dic_list.append(k)
for el in dic_list:
    del dic[el]
print(dic)

tips:

#  直接赋值,内存地址指向相同

lst1 = ["⾦⽑狮王", "紫衫⻰王", "⽩眉鹰王", "⻘翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))

# 结果
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王']
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']
# 29347784 29347784

 三、浅拷贝

lst1 = ["何炅", "杜海涛","周渝⺠"]
lst2 = lst1.copy()
lst1.append("李嘉诚")

print(lst1)
print(lst2)
print(id(lst1), id(lst2))
# 两个lst完全不⼀样. 内存地址和内容也不⼀样. 发现实现了内存的拷⻉

四、深拷贝 

import copy
lst1 = ["何炅", "杜海涛","周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("⽆敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))

 

举报

相关推荐

0 条评论