• 第1月2周5天


    1. 基础数据类型补充
    2. 集合set
    3. 深浅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())
    
  • 相关阅读:
    编程用外星人宏建设置教程(在网上找了好久没几个相关帖子,自己研究写下来留个备忘吧)
    通过selenium+pyautogui模拟登陆淘宝(完美实现)
    python之字符串的五种拼接方式
    python之批量文件重命名
    爬虫系列之链家的信息爬取及数据分析
    跟潭州学院的强子老师学习网络爬虫---爬取全书网
    Python之编写测试用例,unittest模块中的TestCase类中的六种断言方法,以及setUp()函数。
    Python学习之路
    GridBagLayout的帮助类
    eclipse和cygwin搭建C++环境的修正版本
  • 原文地址:https://www.cnblogs.com/yonghuierming/p/9507662.html
Copyright © 2020-2023  润新知