• Python学习笔记-Day7


    今日大纲

    一、基础数据类型补充

    二、数据类型之间的转化

    三、集合set

    四、深浅copy

    一、基础数据类型补充

    1、tuple元组:如果一个元组只由一个数据组成,且没有逗号,那么该“元组”的数据类型就是该数据的数据类型

    tu1 = (1)
    tu2 = ("hello")
    tu3 = ([1,2,3])
    tu4 = ({1:1,2:2})    #元组中只有一个数据组成,该元组数据类型与该数据相同
    print(type(tu1))    #<class 'int'>
    print(type(tu2))    #<class 'str'>
    print(type(tu3))    #<class 'list'>
    print(type(tu4))    #<class 'dict'>
    tu5 = (1,)       #有逗号,还是元组类型
    print(type(tu5))      #<class 'tuple'>

    2、list列表:

    ①列表可以相加

    l1=[1,2,3]
    l2=['alex','wusir']
    l3=l1+l2
    print(l3)
    
    输出结果是:
    [1, 2, 3, 'alex', 'wusir']

    ② 在循环一个列表时,删除列表中的某一元素时,该元素后面的元素都会向前进一位,后面元素的索引会改变。

        所以在循环一个列表时,最好不好对列表进行改变大小的操作(增和删)

    例题:将列表中索引为奇数的元素删除

    方法一、将列表中索引为偶数的元素加入到一个新的列表中

    方法二、从列表后面开始删除

    方法三、切片

    l1=[11,22,33,44,55,66,77,88]
    # 方法一、
    l2 = []
    for i in range(len(l1)):
        if i % 2 == 0:
            l2.append(l1[i])
    print(l2)
    # 方法二、
    for i in range(len(l1),-1,-1):
        if i % 2 == 1:
            l1.pop(i)
    print(l1)
    # 方法三、
    l3 = l1[::2]
    print(l3)

    3、字典

    1、创建字典的三种方式:

    ① dic = {}

    ② dic = dict( {   } )

    ③ dic.fromkeys(可迭代对象,value),value会被赋值可迭代对象里的每一个值

    2、在循环一个字典时,对字典的键值对进行删除会报错。

    例题:删除字典key中包含’k‘的键值对

    dic={'key1':'value1','key2':'value2','k3':'v3','name':'alex'}
    li =[]
    for k in dic:
        if 'k' in k:
            li.append(k)
    for i in li:
        dic.pop(i)
    print(dic)

    二、数据类型之间的转化

    1、 int、str、bool之间的转化

    2、str <-------> bytes

    3、str <-------> list

      ① str ----> list:lis = str.split()

      ② list------>str:str = ’ ‘.join(list)

    4、dict.keys()    dict.values()    dict.items ------->list

           list(dict.keys())、  list(dict.values())、list(dict.items())

    5、tuple <------->  list

         tup = tuple(lis)

          lis = list(tup)

    6、dict -------->list:只有字典中的key会转化成list,list不能转化成dict

    三、集合set

    set1 = {1,2,’wusie‘,(3,4)}

    集合里面的元素必须是不可变的,只能是数字、字符串、bool值、元组,但是集合本身是可变的数据类型,集合里面的元素不能重复,集合是无序的。

    主要用途:

        ①去重

        ②关系测试

    1、集合的创建

    set1 = {   }

    set1 = set( {   } )

    2、集合的增、删

    ①集合的增

    set.add():将()里的元素加入到集合中

    set.update():将()里的元素迭代的增加到set中

    set1={'alex','wusir','ritian','egon','barry'}
    set1.add('女神')
    print(set1)
    set2={'alex','wusir','ritian','egon','barry'}
    set2.update('女神')
    print(set2)
    
    结果是:
    {'女神', 'wusir', 'alex', 'ritian', 'barry', 'egon'}
    {'', 'wusir', 'alex', '', 'ritian', 'barry', 'egon'}

    3、关系测试

    ① 交集

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1&set2)
    print(set1.intersection(set2))
    输出结果是:
    {4, 5}
    {4, 5}

    ② 并集

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1|set2)
    print(set1.union(set2))
    输出结果是:
    {1, 2, 3, 4, 5, 6, 7, 8}
    {1, 2, 3, 4, 5, 6, 7, 8}

    ③ 反交集

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1^set2)
    print(set1.symmetric_difference(set2))
    输出结果是:
    {1, 2, 3, 6, 7, 8}
    {1, 2, 3, 6, 7, 8}

    ④ 差集

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1-set2)
    print(set1.difference(set2))
    输出结果是:
    {1, 2, 3}
    {1, 2, 3}

    ⑤ 子集

    set1={1,2,3}
    set2={1,2,3,4,5,6}
    print(set1<set2)#True
    print(set1.issubset(set2))
    输出结果是:
    True

    ⑥ 超集

    set1={1,2,3}
    set2={1,2,3,4,5,6}
    print(set2 > set1)
    print(set2.issuperset(set1))
    输出结果是:
    True

    四、深浅copy

    1、赋值运算:等号两边的变量指向的内存地址是一样的

    l1=[1,2,3]
    l2=l1    #赋值运算,l2和l1指向的内存地址是一样的,l1改变的话l2也跟着改变
    l1.append(666)
    print(l2)
    print(id(l1))
    print(id(l2))
    
    
    输出结果是:
    [1, 2, 3, 666]
    2830857511752
    2830857511752

    2、浅copy:

    l2=l1.copy()

    第一层的内存地址不一样,但是第二层的内存地址还是一样的。

    例如:

    l1=[1,2,3,[22,]]
    l2=l1.copy()
    l1.insert(0,'hello')
    print(l2)      #第一层,l2与l1的内存地址不同没有变
    l1[-1].append('taibai')
    print(l2)       #第二层,l2和l1的内存地址相同,l2改变了
    
    输出结果是:
    [1, 2, 3, [22]]
    [1, 2, 3, [22, 'taibai']]

    3、深copy

    import copy

    l2 = l1.deepcopy

    对于深copy来说,两个变量的内存地址是完全独立的,无论改变任何一个元素(无论多少层),另一个不会跟着改变

    例如:

    import copy
    l1=[1,2,3,[22,]]
    l2=copy.deepcopy(l1)   #深copy,不会改变l2的值
    l1[-1].append('太白')
    print(l2)
    
    输出结果:
    [1, 2, 3, [22]]

    #切片是浅copy

  • 相关阅读:
    未能加载文件或程序集“file:///C:Program Files (x86)SAP BusinessObjectsCrystal Reports for .NET Framework 4.0
    iwms后台出现从客户端(ctl00$cphMain$logo="<img src="pic/logo.g...")中检测到有潜在危险的 Request.Form 值。错误解决方法
    Socket层实现系列 — accept()的实现(二)
    Socket层实现系列 — accept()的实现(一)
    Socket层实现系列 — getsockname()和getpeername()的实现
    洛谷1279 字串距离
    poj 2411
    poj 2411
    noip提高组 2010 关押罪犯 (洛谷1525)
    二分图匹配 (匈牙利算法) 洛谷3386
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9460375.html
Copyright © 2020-2023  润新知