day07 Python中列表和字典会遇到的坑

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: fhb
# @Date  : 2018/10/25
# @Desc  :

##  循环删除列表坑
lst = ["王大锤", "王有才", "张小白", "刘大哥"]
# 清空这个列表
# lst.clear()

for el in lst:
    lst.remove(el) # 删除是不彻底的。 原因是每次删除都会导致元素的移动。 每次都会更新一次索引

print(lst) # ['王有才', '刘大哥']

# 把要删除的内容记录在一个新列表中
new_lst =  []
for el in lst:
    new_lst.append(el)
# 循环这个新列表. 删除原来的列表
for el in new_lst: # 不会导致循环的列表的元素移动问题
    lst.remove(el) # 注意, 删除的是老列表


lst = ["王大锤", "王有才", "张小白", "刘大哥"]
# 删除掉姓王的
new_lst = [] # 装要删除的内容
for el in lst:
    if el.startswith("王"): # 判断字符串是否以xxx开头
        new_lst.append(el)

# 执行删除
for el in new_lst:
    lst.remove(el)

print(lst)



## 循环删除字典坑

dic = {"jay":'周杰伦', "jj":"林俊杰 ", "jack": "莱昂纳多迪卡普里奥"}
# 清空字典
# dic.clear()

# for k in dic: # dictionary changed size during iteration
#     dic["haha"] = "王大锤"

# 将要删除的内容在列表中保存
lst = [] # 所有的key
for k in dic:
    lst.append(k)
for el in lst:
    dic.pop(el)
print(dic)


## formkeys 坑
# fromkeys() 帮我们创建字典
# 正确用法
d = dict.fromkeys("周杰伦", "王尼玛")
print(d)

# 坑1
dic = {}
# fromkeys是创建新字典。 不是在原有的基础上给你增加键值对
d = dic.fromkeys("周杰伦", "王尼玛") # fromkeys是一个staticmethod  静态方法.
# dd = dict()
# ddd = {}
print(d)  # {'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'}
print(dic) # {}

# # 坑2
# 你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变
d = dict.fromkeys("周杰伦",["哇哈哈"])
print(d) # {'周': ['哇哈哈'], '杰': ['哇哈哈'], '伦': ['哇哈哈']}
d["周"].append("爽歪歪")
print(d)  # {'周': ['哇哈哈', '爽歪歪'], '杰': ['哇哈哈', '爽歪歪'], '伦': ['哇哈哈', '爽歪歪']}

print(id(d["周"]), id(d["杰"]), id(d["伦"])) # 4524578248 4524578248 4524578248

  

原文地址:https://www.cnblogs.com/fanghongbo/p/9850429.html