第1月2周5天
Posted yonghuierming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1月2周5天相关的知识,希望对你有一定的参考价值。
- 基础数据类型补充
- 集合set
- 深浅copy
七步记忆法
预习(20min)
听课
课间(课堂代码多敲)
下午晚上练习
网上睡觉前回忆
第二天早上
每周总结(默写这周学习的东西,然后对照)
每月总结
!!!error 疑问
在同一个代码块,是先从小数据池去找还是去代码块去找?
!!!
如果b1:gbk的bytes类型---->utf-8的bytes类型怎么办?
先将gbk解码成unicode,再将unicode编码成utf-8
英文字母,数字,特殊字符可以互相转换,因为他们引用的都是ASCII
s1 = "alex"
b1 = s1.encode("gbk")
s2 = b1.decode("utf-8"e)
print(s2)
enumerate
enumerate(iterable,int)
需要可迭代对象,返回元组(索引,值)。
默认初始索引从0开始。
基础数据类型(三)(坑篇)
如何看源码?
元组
"元组中只有一个数据,且没有逗号,则该元组与里面数据的数据类型相同"
tu = (1) 数字类型
tu2 = ("alex")字符串类型
tu3 =(1,)元组类型
列表
"列表与列表可能相加"
l1 = [1,2,3]
l2 = ["alex","wusir"]
l3 = l1 + l2
print(l3)
l1
!!!error 强调
在循环一个列表时,不能对列表进行改变大小操作,会对索引改变,产生改变
!!!
"""删除列表索引的奇数位的值"""
l1 = [11,22,33,44,55,66,77] #错误
for i in range(1,len(l1)-2,2):
l1.pop(i)
#删除之后列表改变了,再次循环的下一个元素都变了。再去判断索引,和最开始的预期是不符的。列表不会动态测试。
#删除动作不仅是删除还是改变列表的大小。
print(l1)
"从后删除"
for i in range(len(l1)-2,-1,-2):
l1.pop(i)
print(l1)
"切片"
print(l1[0::2])
"取出偶数"
l = [l1[i] for i in range(len(l1)) if i % 2 == 0]
print(l)
字典
dict.fromkeys() 创建字典的方式
创建字典的方式
dic={}
dic={a:b for a in l1 for b in l2 }
dic = dict({"name":"alex"})
dic = dict.fromkeys([1,2,3],"alex")
"陷阱"
dic1 = dict.fromkeys([1,2,3],[])
print(dic1)
dic1[1].append("alex")
print(dic1)
print(id(dic[1])) #添加的同一个列表容器
print(id(dic[2]))
print(id(dic[3]))
!!!error 强调
字典在迭代过程中,不能改变字典的大小,例如增加字典或者删除同一个字典.直接报错。
!!!
dic = {"k1":"1","k2":"2","na":"1"}
ll = []
for i in dic.keys():
if "k" in i:
ll.append(i)
for i in ll:
dic.pop(i)
print(dic)
"方式一"
dic = {"k1":"1","k2":"2","na":"1"}
dic1 = {}
for i in dic.keys():
if not "k" in i:
dic1.setdefault(i,dic[i])
"方式二"
dic = {"k1":"1","k2":"2","na":"1"}
dic1 = {i:dic[i] for i in dic.keys() if not "k" in i}
print(dic1)
int str bool bytes
str -> list
s1 = " alex wusir taibai"
l1 = s1.split()
print(l1)
list -> str 此list种的元素必须是str类型
list = ["sfs","sfs","qeqw"]
"".join(list)
dict.keys() dict.values() dict.items() --> list
list --> tuple
tuple --> list
tu2 = (1,)
l1 = list(t2)
dic-->list 默认是将keys都转过去
li = list(dic)
list --> dic 不能直接转
0,{ },[ ],( )," " --> bool False
集合 set
与大数据有关用的多一些
集合要求里面的元素必须是不可变的数据类型,> 元素需要可哈希的。
集合本身是可变的数据类型
集合里面的元素不重复(天然去重),无序。
主要用途:去重,关系测试。
set1 = {"wusir","alex",1,2,3}
set2 = set({"alex","wusir"})
list --> set
list去重,用set效率最高
l1 = [1,2,3,4,5,6,4] #3.7集合为元素自动排序
set1 = set(l1)
增
set1 = {"alex","wusir"}
set1.add("女神")
set1.update("abc") 迭代加入 类似列表extend
删
set1.remove("alex")
set1.pop() 随机删除
set1.clear() #set()表示空集合
del set1
set1.discard() #与remove功能相同,删除元素不存在时不会抛出异常
关系测试
"交集"
set1 & set2
set1.intersection(set2)
"并集"
set1|set2
set1.union(set2)
"反交集"
set1^set2
set1.symmetric_difference(set2)
"差集" #某一方独有的
set1 - set2 #子集 - 超集
set1.difference(set2)
"子集"
set1 < set2 #返回True 表示子集
set1.issubset(set2)
"超集"
set2 > set1 #返回True 表示超集
set2.issuperset(set1)
"冻集合"不可变数据类型,可以表示为字典的key
set1 = {1,2,3}
set3 = frozenset(set1)
"冻集合"不可变数据类型,可以表示为字典的key
深浅拷贝copy
浅拷贝
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666)
print(id(l1))
print(id(l2))
l1 = [1,2,3,[22,]]
l2 = l1.copy() #浅拷贝执行时,开辟一个内存空间赋给新变量,再将元素的地址复制到这个空间中。
print(id(l1))
print(id(l2))
l2[-1].append(33)
print(l1)
print(l2)
深拷贝
import copy
l1 = [1,2,3,[22,]]
l2 = copy.deepcopy(l1) #完全独立的copy一个数据
print(l1,l2)
l1[-1].append("太白")
print(l1,l2)
!!!note copy
完全独立的copy一份数据,与原数据无关 深copy
如果一份数据(列表)第二层时,你想与原数据进行共用 浅copy
!!!
面试题 切片是深拷贝还是浅拷贝.
切片是浅拷贝第二层时共用的
l1 = [1,2,3[22,33]]
l2 = l1[:]
l1.append(66)
print(l2)
# [1, 2, 3, [22, 33]]
l1[-2].append(666)
print(l2)
#[1, 2, 3, [22, 33, 666]]
查看python 源码
import copy
with open(str(copy.__file__), "r") as f:
print(f.read())
以上是关于第1月2周5天的主要内容,如果未能解决你的问题,请参考以下文章
python如何求2020年第19周起止日期: 2020年第19周(5月4日-5月10日)?