• Python基础学习Day7 基础数据类型的扩展 集合 深浅copy


    一、基础数据类型的扩展

    1.1GBK ---> UTF - 8

    #  str --->bytes
    s1 = '太白'               # 字符串是unicode编码
    b1 = s1.encode('gbk')    # 翻译成gbk编码的形式
    print(b1)            # b'xccxabxb0xd7'     两位
    s2 = b1.decode('gbk')    # 解码成字符串
    print(s2)
    b2 = s2.encode('utf-8')     # 翻译成UTF- 8编码的形式
    print(b2)               # b'xe5xa4xaaxe7x99xbd'   三位

    1.2  字母可以直接在GBK和UTF-8之间转换

    s1 = 'alex'
    b1 = s1.encode('gbk')
    s2 = b1.decode('utf-8')
    print(s2)

    注意:上面的代码成立:因为utf-8 gbk Unicode等编码的英文字母,数字,特殊字符都是映射的ASCII码。

    2、元组

    # 如果元组中只有一个数据,且没有逗号,该元组与里面的数据的数据类型相同。
    tu1 = (1,)
    tu2 = ('alex')
    tu3 = ([1,2,3])
    print(tu1,type(tu1))      # (1,) <class 'tuple'>
    print(tu2,type(tu2))      # alex <class 'str'>
    print(tu3,type(tu3))      # [1, 2, 3] <class 'list'>

    3.1 列表的相加

    # 列表是可以相加的
    l1 = [1,2,3]
    l2 = [4,5,6,1,2,3]
    l3 = l1 + l2
    print(l3)     # [1, 2, 3, 4, 5, 6]

    注意:列表是可以相加的,但是不能相减

    3.2列表的删除

        注意:再循环一个列表时,如果对列表中的某些元素进行删除,那么次元素后面的所有元素就会向前进一位,他们的索引就会发生变化。

    列表的三种删除方式:

    例题 :删除索引为奇数位的元素,形成新的列表
    # 方法一 :切片+步长
    l1 = [11,22,33,44,55,66,77]
    print(l1[::2])  # [11, 33, 55, 77]
    # 方法二: 创建新列表
    l1 = [11,22,33,44,55,66,77]
    l2 = []
    for i in l1:
        if l1.index(i) % 2 == 0:
            l2.append(i)
    l1 = l2
    print(l1)
    # 方法三:倒序删除
    l1 = [11,22,33,44,55,66,77]
    for i in range(len(l1)-1,-1,-1):   # 倒序循环
        #print(i)
        if i % 2 == 1:
            l1.pop(i)     # 按照索引去删除
    print(l1)

    4.1字典的三种创建方式

    # (1)直接创建
    dic1 = {'name':'alex','age':28,'sex':'M'}
    # (2)fromkeys()创建
    dic = dict.fromkeys([1,2,3],'alex')
    print(dic)         # {1: 'alex', 2: 'alex', 3: 'alex'}   值的内存地址指向同一个
    # (3)通过 dict()创建
    dic = dict({'name':'alex','age':28,'sex':'M'})   # 存在即合理
    print(dic)

    4.2 如何在循环时删除字典的值: 创建一个列表,再循环列表时删除字典的数据

    dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'}
    # 将dic的健中含有k的元素的所有键值对删除。
    key = []
    for k in dic1.keys():
        key.append(k)
    for i in key:
        if "k" in i:
            dic1.pop(i)
    print(dic1)

    注意:dictionary changed size during iteration : 再循环一个字典时,不能改变字典的大小

    5、基础数据类型之间的转换

         5.1int str bool 三者的转换

    # int str bool 三者的转换
    # str <---> bytes   # encode()  decode()
    # str <---> list
    s1 = 'alex wusir taibai'
    l1 = s1.split()
    print(l1)         # ['alex', 'wusir', 'taibai']
    # list <---> str
    l1 = ['alex', 'wusir', 'taibai']
    s2 = ' '.join(l1)
    print(s2)      # 'alex wusir taibai'

       5.2元组 <---> list

    # 元组 <---> list
    tu2 = (0,2,3)
    l1 = list(tu2)
    print(l1)               # [0, 2, 3]

      5.3字典<--->list

    # 字典<--->list
    dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'}
    l1 = list(dic1)   # 可以将字典的key取出来,形成列表
    print(l1)         # ['key1', 'key2', 'key3', 'name']
    # 其他形式的转化 :keys()  values() items()

    6、集合

    set1 = {'alex',[1,2],1,2,3}  # unhashable type: 'list'
    set2 = {'alex','wusir'}
    set3 = set({'alex','wusir','alex'})   # set转化为集合,集合有去重的特性
    print(set3)

    6.1关系测试

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8,9}
    交集
    print(set1 & set2)
    print(set1.intersection(set2))
    
    
    # 并集
    print(set1 | set2)
    print(set1.union(set2))
    
    # 反交集
    print(set1 ^ set2)
    print(set1.symmetric_difference(set2))
    
    # 差集
    print(set1- set2)
    print(set1.difference(set2))
    
    # 子集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    print(set1 < set2)
    print(set1.issubset(set2))
    
    # 超集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    print(set2 > set1)
    print(set2.issuperset(set1))

    6.2 集合转换元组

    set1 = {1,2,3}
    set3 = frozenset(set1)  # 转换成元组    ***
    print(set3)             # frozenset({1, 2, 3})

    7.1赋值运算

    1 = [1,2,3]
    l2 = l1
    l1.append(666)
    print(l2)
    print(id(l1))
    print(id(l2))  # 指向同一个内存地址

    8、深浅copy

    # (1) 浅copy
    l1 = [1,2,3,[22,]]
    l2 = l1.copy()
    # l1.append('alex')
    # print(l1,l2)
    # print(id(l1),id(l2))  # 指向不同一个内存地址
    l1[-1].append('taibia ')
    print(l1,l2)
    print(id(l1))   # 内存地址不相同
    print(id(l2))
    print(id(l1[-1]))    # 内存地址相同
    print(id(l2[-1]))

     

    # (1)深copy
    import copy
    l1 = [1,2,3,[22,]]
    l2 = copy.deepcopy(l1)
    # print(l1,l2)
    # l1.append(666)
    l1[-1].append('太白')
    print(l2)

  • 相关阅读:
    道路和航线(最短路SPFA优化算法)
    走廊泼水节 (最大生成树)
    大数板子
    强连通分量
    path(CCPC网络赛)
    Plug It In!(网络流板子)
    链式前向星上DFS(Pants On Fire)
    手环定理
    (x+y)%p==b ;(x*y)%p==c; 知道b,c,求x,y;
    牛客多校第六场-H-Pair
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9459140.html
Copyright © 2020-2023  润新知