for循环的问题.  str操作  ,  list的删除问题  ,   set集合(添加:add(),update(),     删除:pop()    ,      查询:可迭代对象)     ,深浅拷贝

1. for循环的问题

for 从1 到10
for i in range(1, 11):
 print(i)
 if i == 3:
 break # 也可以使用break和continue
else: # for循环后面也有else
 print("蒙哥, 看啥呢???")
print("那里没有代码")

和while比较

index = 1
while index < 11:
    index = index + 1
    if index == 5:    #等于5时停止循环,不打印5
        break
    print(index)
else:
    print("哈哈哈")   #这个print跟if同级所以不打印
print("呵呵")      #这个print跟while同级,打印

 

 

 

str操作
join() 把列表变成字符串

lst = ["黄飞鸿", "霍元甲", "十三姨", "鬼脚七"]
s = "_*_".join(lst) # 把列表变成字符串. 用前面的字符串把列表连接起来, 返回新字符串
print(s)


split() 把字符串转换成列表
s = "你今天准备什么时候睡觉"
s1 = "_".join(s) # 你_今_天_...
lst = s1.split("_")
print(lst)
结果:['你', '今', '天', '准', '备', '什', '么', '时', '候', '睡', '觉']

. list的删除问题(绕)
列表在循环的时候如果执行了删除操作. 索引和长度会有变化. 这种删除是不安全.
先把要删除的内容放在一个新列表中. 然后循环这个新列表. 删除老列表.

lst = ["你是谁","我是谁","他是谁","你不是"]
new = []
for w in lst:
    new.append(w)
for el in new:
        lst.remove(el)
print (lst)

dict在循环过程中是不允许删除的.
把要删除的键放在列表中. 循环列表删除字典

删除案例
dic = {"韩哥":"发图不留种", "奎峰":"斗图小皇帝", "徐阳":"开车不留情"}
lst = ['奎峰']
for el in lst:  # 循环list
    dic.pop(el) # 删除的是dict中的元素
print(dic)
结果:{'韩哥': '发图不留种', '徐阳': '开车不留情'}



不同案例
# #  把第一个参数中的每一项拿出来和第二个参数组成一个键值对
# #  生成出来的键指向的value是同一个对象. 改变其中一个的时候. 另一个也会跟着改变
# # dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"])
# # dic['jay'].append("蔡依林")
# # print(dic)
dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"])
dic['jay'].append("蔡依林")
print(dic)
结果:{'jay': ['周杰伦', '林俊杰', '蔡依林'], 'jj': ['周杰伦', '林俊杰', '蔡依林']}







set集合
无序的. 不重复的. 内容必须是可哈希的数据类型.
set集合本身是不可哈希,可变的

set集合里面的内容是可哈希的,不可变的
添加:add(),update(),
删除:pop()
查询:可迭代对象

dic = {"朱元璋":"明太祖", "朱棣":"明成祖", "朱元璋":"朱重八"}
dic['朱元璋'] = "和尚"
print(dic)
# set就是存储的key, set集合不会重复, 无序
结果:{'朱元璋': '和尚', '朱棣': '明成祖'}



去除重复
lst = [1,4,7,1,4,5,6,7,8,2,1,3,9]
s = set(lst)
lst = list(s)
print(lst)
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
添加元素
s = set({})
s.add("王祖蓝") # 添加元素
s.add("王祖贤")
s.add("王祖蓝")
print(s)      #打印一次"王祖蓝"因为set会去重
结果:{'王祖蓝', '王祖贤'}
迭代更新
s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
s.update("中岛美嘉") # 迭代更新
print(s)
结果:{'中', '嘉', '黄家驹', '李谷一', '美', '张国荣', '周润发', '邓丽君', '岛'}

随机删除pop()
s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
item = s.pop() # 随机删除
print(item)
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

#求交集
print(s1 & s2)
print(s1.intersection(s2)) # 交集
结果:{'皮长山'}
{'皮长山'}




并集
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

print(s1 | s2)
print(s1.union(s2)) # 并集
结果:{'刘能', '冯乡长', '皮长山', '刘科长', '赵四'}
{'刘能', '冯乡长', '皮长山', '刘科长', '赵四'}
差集
s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

#差集, 把自己本身中和对方不相关的内容留下
print(s2 - s1)
print(s2.difference(s1))
结果:{'冯乡长', '刘科长'}
{'冯乡长', '刘科长'}

深浅拷贝
拷贝是复制一份
浅拷贝: 只会拷贝第一层内容. 第二层的内容不会拷贝
copy() 2.[:]

浅拷贝(两种):



lst1 = ["紫衫龙王", "白眉鹰王", "青翼蝠王", "金毛狮王"]
lst2 = lst1
print(id(lst1))
print(id(lst2))



浅拷贝:



lis1=['小哥哥','小姐姐',['小小']]
lis2=lis1.copy()
'''在这里lis1和lis2的内存地址发生了改变,它们现在是两个不同的内存地址,(只copy了一层内容)
所以改变其中一个,另一个不会随着改变,如果列表里面再套一个列表那么操作的时候第二层的内容也会跟着变'''
lis1.remove('小哥哥')
print(lis1)
print (lis2)
#结果:['小姐姐', ['小小']]
   #['小哥哥', '小姐姐', ['小小']]





lst1 = ["杨晓", "谢逊", ["说不得","听不得","打不得","骂不得"]]
lst2 = lst1.copy() # 拿到的是第一层的复制品
print(id(lst1[2]), id(lst2[2]))
lst1[2].append("看不得")
print(lst1, lst2)



 

深度拷贝
拷贝所有内容. 包括里层的所有内容
import copy
lst1 = ["杨晓", "谢逊", ["说不得","听不得","打不得","骂不得"]]
lst2 = copy.deepcopy(lst1) # 深度拷贝
print(id(lst1[2]), id(lst2[2]))
lst1[2].append("看不得")
print(lst1, lst2)
结果:42269896 42373768
['杨晓', '谢逊', ['说不得', '听不得', '打不得', '骂不得', '看不得']] ['杨晓', '谢逊', ['说不得', '听不得', '打不得', '骂不得']]



lis1=[1,2,3,[4,5]]
import copy     #先引用深度拷贝
lis2=copy.deepcopy(lis1)    #深度拷贝,拷贝lis1的所有内容,然后生成一个新的内存地址
lis2[3].append(8)         #对lis1或lis2进行操作,它们互不影响
print(lis1)
print(lis2)
# 结果:[1, 2, 3, [4, 5]]
#      [1, 2, 3, [4, 5, 8]]