zoukankan      html  css  js  c++  java
  • python基础期七数据类型扩充,set及深潜copy

    基础数据类型的知识补充
    1.元祖
    如果元祖的中的元素只有一个且没有逗号,则‘元祖’的数据类型与该元素的数据类型相同。
    tu1= (1)
    tu11 =(1,)
    print(tu1,type(tu1),tu11,type(tu11))

    tu2 = ('a')
    tu22 = ('a','b')
    print(tu2,type(tu2),tu22,type(tu22))

    tu3 = ([1,2,3])
    tu33 = ([1,2,3],)
    print(tu3,type(tu3),tu33,type(tu33))

    tu4 = ({1:'sunf'})
    tu44 =({1:'sunf'},)
    print(tu4,type(tu4),tu44,type(tu44))

    2.列表
    列表和列表可以相加,可以和数字相乘(或列表中的某个数字元素),但列表不能相除或相减
    l1 =[1,2,3,4]
    l2 = ['a','b','c','d']
    l3 = l1+l2
    print(l3)
    print(l2*l1[2])

    2.1 在列表进行循环或者遍历时删除列表中某个元素,则此元素后面的元素则会像前一位,列表的索引发生改变。
    建议删除时可以从后往前删除
    删除列表中索引为奇数的元素
    l1 = [11, 22, 33, 44, 55, 66, 77, 88]
    方法一:切片加步长
    del l1[1::2]
    print(l1)
    方法二:在列表循环过程中从后往前删除
    for i in range(len(l1)-1,-1,-1):
    if i %2 ==1:
    l1.pop(i)
    print(l1)
    方法三:将保留的元素追加一个新列表,然后在赋值给原列表
    l2 = []
    for i in range(len(l1)):
    if i % 2 == 0:
    l2.append(l1[i])
    print(l2)
    l1 = l2
    print(l1)
    方法四:将删除的元素追加一个新列表,然后循环匹配原列表的元素,将相的删除
    l2 = []
    for i in range(len(l1)):
    if i % 2 == 1:
    l2.append(l1[i])
    for x in l2:
    if x in l1: 此句可以不要
    l1.remove(x)
    print(l2)
    print(l1)

    3.字典
    3.1字典在循环的过程中删除元素会报错。因为在字典在遍历的过程中不允许改变字典的范围。
    dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
    将 dic的键中含有k元素的所有键值对删除。
    for key in dic:
    if 'k' in key:
    dic.pop(key)
    dictionary changed size during iteration: 在循环一个字典时,不能改变字典的大小。
    l1 = []
    for key in dic:
    if 'k' in key:
    l1.append(key)
    # print(l1)
    for key in l1:
    dic.pop(key)
    print(dic)

    3.2 创建字典方法
    1.直接创建
    dic ={1:2,3:4}
    print(dic)

    2.dict()方法
    dic2 = dict({'a':'b'})
    print(dic2)

    3. dict.formkeys()方法
    dic3 = dict.fromkeys([1,2,3,4],[9,8,7,6])
    print(dic3)
    注意:dict.fromkeys(seq=[1,2,3,4],value=[]) 如果vlaue是一个可变对象(list,dict),则创建的字典中多有的值有一个发生改变,全不
    都改变,因为他们在内存中采用的公共地址池。

    数据类型的转换
    1.str,int,lsit三者之间的转换
    str <---> int 字符和数字可以相互转换,但是str转换为int时必须str中的元素必须为数字
    str <---> list 字符转list用str.split()方法;列表list转str用列表的'*'.jion(list)方法,但是list中的元素只能是str字符串类型
    list =['a','b','c',4] #列表中含有整型,则会报错(TypeError: sequence item 3: expected str instance, int found)
    s = '-'.join(list)
    print(s,type(s))
    dict.keys() dict.values() dict.items() list()
    tuple <---> list 直接相互转换
    dict ---> list 直接将字典转换为list时,用list(dict),转换出来的时keys的列表
    不能将list直接转换为字典dict(list)
    dic1 = {1:2,3:4,5:6}
    lst1 = list(dic1)
    print(lst1,type(lst1))

    # l2 = ['name', 'age']
    # dic2 = dict(l2)
    # print(dic2)

    深浅拷贝
    赋值运算
    l1 = [1,2,3]
    l2 = l1
    l1.append(666)
    print(l2)
    print(id(l1))
    print(id(l2))


    浅copy
    l1 = [1,2,3]
    l2 = l1.copy()
    l1.append(666)
    print(l2)

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

    集合set
    set:
    {'wusir', 'alex', 1, 2, 3}
    集合要求里面的元素必须是不可变的数据类型,但是集合本身是可变的数据类型。
    集合里面的元素不重复(天然去重),无序。
    主要用途:
    1,去重。
    2,关系测试。
    set1 = {'alex', [1,2], 1,2,3}
    set1 = {'alex', 'wusir'}
    set2 = set({'alex', 'wusir'})
    print(set2)

    面试必考:list去重 *****
    l1 = [1,1,2,3,4,4,3,2,1,5,5]
    set1 = set(l1)
    l2 = list(set1)
    print(l2)


    set1 = {'alex','wusir','ritian','egon','barry'}

    set1.add('女神')
    print(set1)

    set1.update('abc')
    print(set1)


    set1.remove('alex')
    print(set1)
    set1.pop()
    print(set1)
    set1.clear()
    print(set1)

    del set1
    print(set1)

    关系测试

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}

    交集
    print(set1 & set2)
    print(set1.intersection(set2))

    并集
    print(set1 | set2)
    print(set1.union(set2))

    反交集

    print(set1 ^ set2)
    print(set1.symmetric_difference(set2))

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    差集
    print(set1 - set2)
    print(set1.difference(set2))

    子集
    set1 = {1,2,3}
    set2 = {1,2,3,4,5,6}
    print(set1 < set2) # True
    print(set1.issubset(set2))

    超集
    print(set2 > set1)
    print(set2.issuperset(set1))

    set1 = {1,2,3}
    set3 = frozenset(set1)
    print(set3) # 不可变的数据类型。 ***
  • 相关阅读:
    POJ 2942 圆桌骑士 (点双学习笔记)
    洛谷P3563 POI Polarization
    通过集群的方式解决基于MQTT协议的RabbitMQ消息收发
    在WebAPI中调用其他WebAPI
    将WebAPI发布到本地服务器与远程服务器
    利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发
    C#程序调用cmd.exe执行命令
    C#调用python
    Trixbox下SIP TRUNK的基本设定
    连接两台asterisk服务器
  • 原文地址:https://www.cnblogs.com/qilin610/p/9465197.html
Copyright © 2011-2022 走看看