zoukankan      html  css  js  c++  java
  • Python学习笔记六_集合与常用小技巧

    这篇学习笔记先简单记录几个常用python中的小技巧,然后来学习集合。

    一、常用小技巧

    1、非空即真,非0即真

    不为空的话就是true,是空的话就是false
    只要不是0就是true,是0就是false

    name = input('输入姓名').strip()
    if name: #输入姓名不为空
        print('输入正确')
    else: #name = ‘’
        print('输入不能为空')
    print(bool('')) #False
    print(bool('abc')) #True

    2、同时定义多个变量

    a = b = c = 0 #定义了3个变量,值都是0

    3、交换变量

       (1) 不通过中间变量如何交换

    a = a + b
    b = a - b
    a = a - b

       (2) python中如何交换

    b,a= a,b #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换

       (3) 交换三个变量

    a = 1
    b = 'a'
    c = True
    a,b,c = c,a,b #交换三个变量的值,三个变量可以是不同的类型
    print(a,b,c) #True 1 a

    4、深拷贝与浅拷贝

       (1) 顺序循环删list里面的数据的时候,结果会不正确

             因为删除的时候元素下标会发生变化

    l = [1,1,2,3,4,5,6,8]
    #下标 0,1,2,3,4,5,6,7 i=0
    #删除下标为0的1后l=[1,2,3,4,5,6,8]
    #下标             0,1,2,3,4,5,6 i=1
    #此时循环i=1,下标为0的1被跳过去了
    ##删除下标为0的1后l=[1,2,3,4,5,6,8]
    #下标              0,1,2,3,4,5,6 i=2
    
    for i in l:
        if i%2!=0:
            l.remove(i) #下标为0的1被删除后,下标为1的1变为下标为0了
    print(l) #[1, 2, 4, 6, 8]

       (2) 想循环删除的话,有两个办法

           i. 深拷贝一个同样的list,循环深拷贝list,删除原list元素

    l = [1,1,2,3,4,5,6,8]
    l2 = [1,1,2,3,4,5,6,8]
    l3 =l
    #不能写成 l2=l,因为变量存的是内存地址,l2与l指向同一个内存地址,当l的值发生变化,l2的值同样会发生变化
    print(id(l)) #id查看内存地址
    print(id(l2)) #l2的内存地址与l不同
    print(id(l3)) #l3的内存地址与l相同
    for i in l2:
        if i%2!=0:
            l.remove(i) #l中的元素下标变化,但是l2中的下标没有发生变化
    print(l)

            ii.倒着删除,好处是不用新建一个list,节省了内存

    l = [1,1,2,3,4,5,6,8]
    i = len(l)-1 #循环的是下标,不是元素,所以len(l)-1
    while i > -1:
        if l[i]%2!=0:
            l.remove(l[i])
        i -= 1
    print(l)

       (3) 深拷贝与浅拷贝的区别是:深拷贝重新开辟内存空间,浅拷贝两个变量存的是同一个内存地址

    import copy
    l = [1,1,2,3,4,5,6,8]
    l2 =copy.deepcopy(l) #深拷贝,重新开辟内存空间
    l3 = l #浅拷贝,存同一个内存地址
    print(id(l))
    print(id(l2))
    print(id(l3))#浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间
    l2.append(9)
    print(l) #[1, 1, 2, 3, 4, 5, 6, 8]
    l3.append(10)
    print(l) #[1, 1, 2, 3, 4, 5, 6, 8, 10]

    二、集合

    1、集合定义

    集合也是一种数据类型,它的特性是天生去重,无续

    s=set() #定义空集合,不能s={},这是空字典
    s1 ={'1','1','3','4'} #直接定义集合
    s2 = set('1234455') #把字符串转换成集合,集合可以直接去重
    l = [1,2,3]
    s3 = set(l)#把列表转换成集合
    print(s1) #{'4', '3', '1'}
    print(s2) #{'4', '5', '2', '3', '1'}
    print(s3) #{1, 2, 3}

    2、集合的作用

       (1) 它可以把一个列表中重复的数据去掉,而不需要再写判断

    l = [1,1,2,3,3]
    s = set(l)
    print(s) #{1, 2, 3}

       (2) 可以做关系测试,比如有两个班,一个性能测试班,一个接口测试班,想找出既学了性能又学了接口的同学,可以用集合(交集)

    3、集合操作

       (1) 交集、并集、差集、对称差集

             交集:取两个集合相同的地方

    s1 = {1,2,3,4}
    s2 = {3,4,5}
    print(s1 & s2)#取交集 {3, 4}
    print(s1.intersection(s2))#取交集{3, 4}

            并集:把两个集合合并到一起,然后去重

    s1 = {1,2,3,4}
    s2 = {3,4,5}
    print(s1 | s2) #取并集,{1, 2, 3, 4, 5}
    print(s1.union(s2)) #取并集,{1, 2, 3, 4, 5}

            差集:从是s1中去掉s1与s2的交集

    s1 = {1,2,3,4}
    s2 = {3,4,5}
    print(s1 - s2) #取差集,{1, 2}
    print(s1.difference(s2)) #取差集,{1, 2}

           对称差集:去掉俩集合里都有的

    s1 = {1,2,3,4}
    s2 = {3,4,5}
    print(s1 ^ s2) #取对称差集,{1, 2, 5}
    print(s1.symmetric_difference(s2)) #取对称差集,{1, 2, 5}

       (2) 集合的增删改查:add(), remeve(), pop(), discard(), update()

    s1 = {'a','b'}
    s2 = {'hi'}
    s1.add('c') #加元素
    print(s1) #{'b', 'c', 'a'}
    s1.remove('a')#指定删除元素
    print(s1)#{'b', 'c'}
    s1.pop() #随机删除一个
    print(s1)#{'c'}
    s1.discard('ss')#如果删除的元素存在,删除,不存在不做处理
    print(s1)#{'c'}
    s1.update({'hello','hi'})#把另外一个集合加进去
    print(s1)#{'hello', 'c', 'hi'}

       (3)集合的方法

    s1 = {'a','b'}
    s2 = {'a'}
    print(s1.isdisjoint(s2))#如果没有交集的话返回True,false
    print(s1.issubset(s2))#判断s1是不是s2的子集,false
    print(s1.issuperset(s2))#判断s1是不是s2的父集,true
  • 相关阅读:
    BeanUtils在web项目中的应用
    BeanUtils的日期问题
    使用BeanUtils组件
    调用数据库过程函数mysql
    sql注入
    如何取SO中的特性
    Read config detail from SO
    Parts-Ufida ERP project 1
    常用医疗英语
    April 24th 2020
  • 原文地址:https://www.cnblogs.com/dongrui624/p/8710380.html
Copyright © 2011-2022 走看看