1.while...else和for...else,废话不多说,直接看代码,不知道结果的可以自行实验。
1 for i in range(1,6): 2 if i==3: 3 break 4 print(i) 5 else: 6 print(777)
1 for i in range(1,6): 2 print(i) 3 else: 4 print(777)
2.常见的数据类型转换
#数字转字符串PS:能看懂这波俩个i的同学恭喜你,装饰器的重点你可能一下就理解了 i=123 i=str(i) print(i,type(i))
#数字转bool值 i=123 i=bool(i) print(i,type(i)) #举个特殊的0 b=0 b=bool(b) print(b,type(b))
#万能的字符串除了字典不能直接转,都可以,骚的不行!为什么这么骚,因为人是可迭代对象 s1='123' #字符串转数字,前提是字符串为数字 s_int=int(s1) print(s_int,type(s_int)) #字符串转列表 s2='123hjs' s_list=list(s2) print(s_list,type(s_list)) #字符串转元组 s_tuple=tuple(s2) print(s_tuple,type(s_tuple)) #字符串转集合 s_set=set(s2) print(s_set,type(s_set)) #下面演示一波特殊的空字符串转bool值 s3='' s_bool=bool(s3) print(s_bool,type(type))
#列表转字符串 lst=['alex','wusir','taibai'] s_lst=str(lst) print(s_lst,type(s_lst)) #列表转元组 tuple_lst=tuple(lst) print(tuple_lst,type(tuple_lst)) #列表转集合 set_lst=set(lst) print(set_lst,type(set_lst)) #特殊的空列表转换bool值 lst1=[] lst2=[None] # 列表括号里换成'',(),[],类似结果一样还是True bool_lst1=bool(lst1) bool_lst2=bool(lst2) print(bool_lst1,type(bool_lst1)) print(bool_lst2,type(bool_lst2))
#元组转列表 tu=('a',1,None) list_tu=list(tu) print(list_tu,type(list_tu)) #元组转集合 set_tu=set(tu) print(set_tu,type(set_tu)) #元组转字符串 str_tu=str(tu) print(str_tu,type(str_tu)) #空元组转换bool值依旧是False tu1=() bool_tu=bool(tu1) print(bool_tu,type(bool_tu))
#集合转列表 set1={1,'taibai','alex'} list_set=list(set1) print(list_set,type(list_set)) #集合转元组 tuple_set=tuple(set1) print(tuple_set,type(tuple_set)) #集合转字符串 str_set=str(set1) print(str_set,type(str_set)) #空集合转换bool值 set2=set() bool_set=bool(set2) print(bool_set,type(bool_set))
# 字典转字符串 dic = {'name': 'taibai', 'age': '18'} str_dic = str(dic) print(str_dic, type(str_dic)) # 字典转列表有搞头,因为字典有keys、values、items三个好玩的 list_dic1 = list(dic.keys()) # 和直接list这个字典一样 print(list_dic1, type(list_dic1)) list_dic2 = list(dic.values()) print(list_dic2, type(list_dic2)) list_dic3 = list(dic.items()) print(list_dic3, type(list_dic3)) # 每个键值对生成一个元组组成的列表 # 字典转元组与转列表一样的,就不一一举例了 tuple_dic = tuple(dic) print(tuple_dic, type(tuple_dic)) # 字典转集合同楼上 set_dic = set(dic) print(set_dic, type(set_dic)) # 空字典转bool值 dic1 = {} bool_dic = bool(dic1) print(bool_dic, type(bool_dic))
终于捋完了,但是感觉还差点什么,whatever,先就这些吧,总结一下:字符串是最强的数据类型,能和各个数据类型进行转换;字典因为是键值对形式的数据类型,所以转换起来需要通过调用自己的items方法才能完美转换成和原来一样形态的数据类型(个人理解,有点绕);列表、集合、元组这三个数据类型应该是三个很默契的合伙人,只要是可迭代对象他们就能带你飞;数字就不做赘述了 。
3.列表、字典的循环操作问题
列表在循环中,如果进行增删的操作,会改变其索引;与字典在循环中进行增删的操作会改变其大小一个道理,为了解决该问题的方案(字典的例子可以自行实验):
s = '老男孩都是大佬' lst = [] # s1='_'.join(s) # lst=s1.split('_') lst.extend(s) # 先构建一个列表,用一波迭代添加回忆下 print(lst) # 利用新的列表将旧列表的每个元素删除 lst2 = [] for i in lst: lst2.append(i) print(lst) for i in lst2: lst.remove(i) print(lst)
s = '老男孩都是大佬' lst=list(s) print(lst) for i in range(0, len(lst)): lst.pop() print(lst)
4.fromkeys是个蛇精病
# 把第一个参数中的每一个元素拿出来和第二个参数组成一个键值对 # 生成出来的键指向的value是同一个对象. 改变其中一个的时候. 另一个也会跟着改变 dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "林俊杰"]) dic['jay'].append("蔡依林") print(dic)
dic = {} dic.fromkeys(["葫芦娃", "蛇精"], ["冯提莫", "陈一发"]) print(dic) # 什么都不打印.此处涉及的静态方法的概念,后面面向对象会讲到
5.深浅copy
赋值运算俩个内存地址完全一样;
lst1 = ["金⽑狮王", "紫衫龙王", "⽩眉鹰王", "⻘翼蝠王"] lst2 = lst1 print(lst1,id(lst1)) print(lst2,id(lst2)) lst1.append("杨逍") print(lst1,id(lst1)) print(lst2,id(lst2))
浅copy只能使外层的内存地址变为新的,里层的内存地址还是一样;
lst1 = ["何炅", "杜海涛", "周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]] lst2 = lst1.copy() lst1[3].append("⽆敌是多磨寂寞") print(lst1,id(lst1)) print(lst2,id(lst2)) print(id(lst1[3]), id(lst2[3]))
深copy所有层都是独立的内存地址。
import copy lst1 = ["何炅", "杜海涛", "周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]] lst2 = copy.deepcopy(lst1) lst1[3].append("⽆敌是多磨寂寞") print(lst1) print(lst2) print(id(lst1[3]), id(lst2[3]))