• Python基础—set、copy(Day7)


    一、数据类型补充

     1.str:.isspace()字符串是空格或至少是一个空格。    

    s='alex'
    s1=' '
    ret=s1.isspace()
    print(ret)

    执行结果:True

     2.tul: 对于元组如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型。

    tu=(1)
    tu1=(1,)
    print(tu,type(tu))
    print(tu1,type(tu1))
    
    执行结果:
    1 <class 'int'>
    (1,) <class 'tuple'>

     3.list:在循环一个列表示,最好不要进行删除的动作,一旦删除索引会随之变化,容易出错(如果一定要删除可以倒着删)。

     例:将索引为奇数的元素删除

    #方法1通过循环查找索引为偶数的元素添加到新的list
     li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神']
     l1=[]
     for i in range(len(li)):
         if i % 2==0:
             l1.append(li[i])
     li=l1
     print(li)
    
    执行结果:['老男孩', 'alex', 'egon', '女神']
    #方法2直接切片删除
    li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神']
    del li[1::2]
    print(li)
    
    执行结果:['老男孩', 'alex', 'egon', '女神']
    #方法3通过循环倒着删除
    li = ['老男孩', 'python', 'alex', 'wusir', 'egon', 'ritian', '女神']
    for i in range(len(li)-1,-1,-1):
        if i % 2==1:
            del li[i]
    print(li)
    
    执行结果:['老男孩', 'alex', 'egon', '女神']

      4.dict : dict.fromkeys('可迭代对象',‘值’) 

    dic=dict.fromkeys('abc','alex')
    print(dic)
    
    执行结果:
    {'a': 'alex', 'b': 'alex', 'c': 'alex'}
    dic=dict.fromkeys([1,2,3],[])
    print(dic)
    dic[1].append('老男孩')
    print(dic)
    
    执行结果:
    {1: [], 2: [], 3: []}
    {1: ['老男孩'], 2: ['老男孩'], 3: ['老男孩']}

      在循环字典时不能改变字典的大小,不能增加或删除此字典的键值对。

     例:将字典中含有k元素的键对应的键值对删除

    dic = {'k1':'value1','k2':'value2','name':'wusir'}
    for i in dic:
        if 'k' in i:
            del dic[i]
    
    执行结果:报错
    l1=[]    #添加到一个列表中进行删除
    for i in dic:
        if 'k' in i:
            l1.append(i)
    for i in l1:
        del dic[i]
    print(dic)
    
    执行结果:
    {'name': 'wusir'}

     5.数据类型转换

        tuple---->list    list(tu)

    tu=(1,2,3)
    li=list(tu)
    print(li)
    
    执行结果:
    [1, 2, 3]

        list---->tuple  tuple(li)

    l1=[1,2,3]
    tul=tuple(l1)
    print(tul)
     
    执行结果:
    (1, 2, 3)

      #0、''、[]、()、{} 空字符串、列表、元组、字典转化为bool都为False

    二、set集合

      集合是不重复的、无序的,它里面的元素是可哈希的,它本身是不和哈希的,不能作为字典的key。

      集合的作用:

      1.去重

        把一个列表变成集合就自动去重了

    li=[11,11,22,22,33,33,33,44]
    li=list(set(li))
    print(li)
    
    执行结果:
    [33, 11, 44, 22]

      2.数据关系测试,测试两组数据之前的交集、差集、并集等关系。

        1)集合的增:

         1. set.add('   ')      

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

         2.set.update([1,2,3]) 迭代增加

    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.update([1,2,3])
    print(set1)
    
    执行结果:
    {1, 2, 3, 'wusir', 'barry', 'alex', 'egon', 'ritian'}

      2)集合的删

       1.Set.remove(‘元素’)

    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.remove('alex')
    print(set1)
    
    执行结果:
    {'wusir', 'egon', 'barry', 'ritian'}

       2.set.pop()随机删除

       3.set.clear()   set()空集合

       4.del set   删除集合

     3)集合的查

         for循环查

    set1 = {'alex','wusir','ritian','egon','barry'}
    for i in set1:
        print(i)
    
    执行结果:
    ritian
    wusir
    barry
    egon
    alex

     4)集合的其他操作

       1.交集 &和set.intersection()

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

       2.反交集 ^和set.symmetric_difference()

    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}

       3.并集 |和set.union()

    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}

       4.差集 set1-set2

    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1-set2)
    
    执行结果:
    {1, 2, 3}

       5.子集  set.issubset()

    set1={1,2,3}
    set2={1,2,3,4,5,6}
    print(set1.issubset(set2))
    
    执行结果:
    True

       6.超集  set.issuperset()

    set1={1,2,3}
    set2={1,2,3,4,5,6}
    print(set2.issuperset(set2))
    
    执行结果:
    True

     三、深浅copy

      1.赋值运算:对于赋值运算指向的是同一内存地址,dict、list、set都是一样的。

    l1=[1,2,3]
    l2=l1
    l2.append(111)
    print(l1,l2)
    
    执行结果:
    [1, 2, 3, 111] [1, 2, 3, 111]

      2.浅copy:不是指向一个,而是又开辟了一个存储空间,对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以对于第二层以及更深的层数来说,保持一致性。

    l1=[1,2,3]
    l2=l1.copy()
    l1.append(111)
    print(l1,l2)
    
    执行结果:
    [1, 2, 3, 111] [1, 2, 3]
    l1=[1,2,3,['guo','li']]
    l2=l1.copy()
    print(l1,id(l1))
    print(l2,id(l2))
    
    执行结果:
    [1, 2, 3, ['guo', 'li']] 427213865032
    [1, 2, 3, ['guo', 'li']] 427213868744
    l1=[1,2,3,['guo','li']]
    l2=l1.copy()
    l1[3][0]='wu'
    print(l1,id(l1[3])) #[1, 2, 3, ['wu', 'li']] 769433489352
    print(l2,id(l2[3])) #[1, 2, 3, ['wu', 'li']] 769433489352

     

    3.深copy deep.copy:对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

    import copy
    l1=[1,2,[1,2,3],4]
    l2=copy.deepcopy(l1)
    l1[2].append(666)
    print(l1,id(l1[2])) #[1, 2, [1, 2, 3, 666], 4] 893847315656
    print(l2,id(l2[2])) #[1, 2, [1, 2, 3], 4] 893847281352

     4.切片浅copy

    l1=[1,2,3,[22,33]]
    l2=l1[:]
    l1[3].append(666)
    print(l2)  #[1, 2, 3, [22, 33, 666]]
  • 相关阅读:
    NgModelController: $setViewValue,$render,Formatter, Parser
    #!/usr/bin/env python与#!/usr/bin/python的区别
    post发送数据 mypost input 改变事件
    post发送 ArrayBuffer
    C# 字符串到字节数组,字节数组转整型
    C# WebKitBrowser 设置内容
    C# Tuple 创建一个新二元集合
    C# 时间对比
    C# 控件调整
    C# invoke和begininvoke的用法 __委托
  • 原文地址:https://www.cnblogs.com/facestore/p/8651270.html
Copyright © 2020-2023  润新知