python day7

一. 昨日内容回顾
1. id() 返回对象的内存地址
2. 小数据池. str, int可能会被添加到小数据池中.
3. == 和is的区别
== : 内容, 值
is : 内存地址的比较
4. encode("编码集") 得到的结果是bytes
英文的bytes: b'英文'
中文的bytes: b'\xa3\xe1\xa4' (UTF-8) b'\xab\xcd'(GBK)
二. 今日主要内容
1. for循环的问题.

if
elif
..
else


while 条件:
循环体
else:
代码块

for .....
else..

# index = 1
# while index < 11:
# index = index + 1
# if index == 5:
# break
# print(index)
# else:
# print("哈哈哈")
# print("呵呵")
# 234呵呵

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

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

split() 把字符串转换成列表

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

# s = "金毛狮王"
# s1 = "_".join(s) # 迭代把每一项进行拼接
# print(s1) # 金毛狮王

# tu = ('你好', "你不好", "你好不好")
# s = "".join(tu)
# print(s)

s = "你今天准备什么时候睡觉"
s1 = "_".join(s) # 你_今_天_...
lst = s1.split("_")
print(lst)

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

# lst = ["倚天屠龙记", "诛仙", "看见", "追风筝的人"]
# clear()
# lst.clear()
# print(lst)
# 有问题
# for i in lst:
# lst.remove(i)
# print(lst)

# for i in lst:# for在这里的意义是记录删除的次数
# del lst[0] # 不正确
# print(lst)



lst = ["倚天屠龙记", "诛仙", "看见", "追风筝的人"]

# 正确
# for i in range(0, len(lst)):
# lst.pop()
# print(lst)

# # 把要删除的东西保存在一个新列表中
# new_lst = []
# for el in lst:
# new_lst.append(el)
# # 循环新列表. 删除老列表
# for e in new_lst:
# lst.remove(e)
# print(lst)

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

# #  把第一个参数中的每一项拿出来和第二个参数组成一个键值对
# # 生成出来的键指向的value是同一个对象. 改变其中一个的时候. 另一个也会跟着改变
# # dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"])
# # dic['jay'].append("蔡依林")
# # print(dic)
#
# # dic = {}
# # dic.fromkeys(["葫芦娃", "蛇精"], ["冯提莫", "陈一发"])
# # print(dic) # 什么都不打印.
#
# # dic = {"韩哥":"发图不留种", "奎峰":"斗图小皇帝", "徐阳":"开车不留情"}
# # for item in dic: # 直接循环迭代的时候拿到的是key
# # if item == '奎峰':
# # dic.pop(item) # dictionary changed size during iteration
#
# # 循环删除的案例
# # dic = {"韩哥":"发图不留种", "奎峰":"斗图小皇帝", "徐阳":"开车不留情"}
# # lst = ['奎峰']
# # for el in lst: # 循环list
# # dic.pop(el) # 删除的是dict中的元素
# # print(dic)
#
# lst = ["发图哥", "谁困. 下午就往他那发图", "轰炸"]
# print(type(lst)) # list
# tu1 = tuple(lst) # tuple
# print(tu1) # ()
# print(type(tu1)) # tuple
# lst1 = list(tu1) # list
# print(lst1) # []
#
# # 能转换成False的数据类型有哪些
# # 0, '', [], (), {}, None, set(), False


dic = {"a":'老A', 'b':"王宝强", 'c':"蓉姐", 'd':'百合姐'}

for k in dic:
if k == 'b' or k == 'c':
dic.pop(k) # dictionary changed size during iteration

4. set集合
无序的. 不重复的. 内容必须是可哈希的数据类型.
本身是不可哈希
添加:add(),update(),
删除:pop()
查询:可迭代对象

需要可哈希的时候用frozenset()

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

# s = {"alex", 1, True, {"你好"}}
# s = {"马虎疼", [1,4,7]} # 不合法. [] 列表是不可哈希的
# s = {"呵呵", "哈哈", "吼吼", (1, 4, 7)}
# print(s)

# 去重复
# lst = [1,4,7,1,4,5,6,7,8,2,1,3,9]
# s = set(lst)
# lst = list(s)
# print(lst)

# s = set({})
# s.add("王祖蓝") # 添加元素
# s.add("王祖贤")
# s.add("王祖蓝")
# print(s)

s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
# s.update("中岛美嘉") # 迭代更新
# print(s)

# s.update(["中岛美雪", "很牛B"])
# print(s)
# s = {"李谷一", "周润发", "邓丽君", "黄家驹", "张国荣"}
# item = s.pop() # 随机删除
# print(item)
# s.clear()
# print(s)
# for el in s:
# print(el)

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

# 求交集
# print(s1 & s2)
# print(s1.intersection(s2)) # 交集

# 并集
# print(s1 | s2)
# print(s1.union(s2)) # 并集

# s1 = {"刘能", "赵四", "皮长山"}
# s2 = {"刘科长", "冯乡长", "皮长山"}
# 差集, 把自己本身中和对方不相关的内容留下
# print(s2 - s1)
# print(s2.difference(s1))

# s = frozenset({1,5,7})
# # print(s)
# # # for el in s:
# # # print(el)
# dic = {s: "周杰伦"} # 验证. frozen是可哈希的. 不可变
# print(dic)

5. 深浅拷贝
拷贝是复制一份
浅拷贝: 只会拷贝第一层内容. 第二层的内容不会拷贝
1. copy() 2.[:]
深拷贝: 拷贝所有内容. 包括里层的所有内容

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

# lst1 = ["紫衫龙王", "白眉鹰王", "青翼蝠王", "金毛狮王"]
# # lst2 = lst1.copy() # 拷贝,复制, 克隆
# lst2 = lst1[:]
# lst1.append("杨宵")
# print(lst1, lst2)

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

# 导入copy模块
import copy
lst1 = ["杨晓", "谢逊", ["说不得","听不得","打不得","骂不得"]]
lst2 = copy.deepcopy(lst1) # 深度拷贝
print(id(lst1[2]), id(lst2[2]))
lst1[2].append("看不得")
print(lst1, lst2)

猜你喜欢

转载自www.cnblogs.com/zm419914/p/9197895.html