zoukankan      html  css  js  c++  java
  • 初识Python第三天(一)

    一.set集合

      set是一个无序且不重复的元素集合

    1 print(dir(set))
    2 
    3 #['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
     1 l1 = ['11', '22', '33',]
     2 l2 = ['44', '55', '66', ]
     3 
     4 s1 = set(l1)  #将一组可迭代的数据传入set集合
     5 print(s1) 
     6 
     7 s1.add('alex')  #给s1添加一个新元素alex,
     8 print(s1)
     9 
    10 s1.add('alex')  #给s1传入一个相同的元素后,对比输出结果二和三,结果并没有改变,由此可见s1集合是一个无序且不重复的元素集合
    11 print(s1)
    12 
    13 #{'11', '33', '22'}          #第一次输出
    14 #{'11', '33', '22', 'alex'} #第二次输出
    15 #{'11', '33', '22', 'alex'} #第三次输出
    add 添加不重复的元素
    1 #difference生成一个新的集合,将新传入的集合移除掉,不能对原来的集合进行修改,需要重新赋值给一个变量
    2 
    3 s2 = set(['alex', 'eric', 'tony', ])
    4 s3 = s2.difference(['alex', 'eric'])
    5 print(s3)   
    6 #结果输出 {'tony'}
    difference 差异比较
    1 s2 = set(['alex', 'eric', 'tony', 'alex'])
    2 s4 = s2.difference_update(['alex', 'eric','jack'])
    3 print(s2)   #结果输出 {'tony'}
    4 print(s4)   #结果输出  None
    5 
    6 #difference_update将原来的集合修改,difference_update和difference都是将新传入的集合删掉,不同之处在于difference是生成一个新的集合,difference_update是对原来的集合进行修改,不会生成一个新的集合
    difference_update 差异更新
    1 s2 = set(['alex', 'eric', 'tony',])
    2 s3 = s2.discard('eric')
    3 print(s2)    
    4 
    5 #结果输出{'tony', 'alex'}
    discard删除一个元素
    1 #pop随机删除一个元素,并获取删除的这个元素,可将删除的这个元素赋值给变量
    2 
    3 s2 = set(['alex', 'eric', 'tony',])
    4 ret = s2.pop()
    5 print(s2)  #结果输出{'alex', 'eric'}
    6 print(ret)  #从新赋值给变量ret ,结果输出 tony
    pop 随机删除元素
    1 #remove移除元素,需要指定参数,remove没有返回值
    2 
    3 s2 = set(['alex', 'eric', 'tony',])
    4 s2.remove('eric')  
    5 print(s2)   #结果输出 {'alex', 'tony'}
    remove移除指定元素
     1 l1 = ['alex', 'eric', 'jack', 'laiying',]
     2 l2 = ['jack', 'tom', 'laiying',]
     3 s1 = set(l1)
     4 s2 = set(l2)
     5 print(s1)
     6 s3 = s1.intersection(s2)
     7 print(s1)
     8 print(s2)
     9 print(s3)
    10 
    11 
    12 #{'eric', 'alex', 'laiying', 'jack'}  第一次原始集合
    13 #{'eric', 'alex', 'laiying', 'jack'}  集合s1和s2进行交集判断后的输出结果,并没有改变对象本身
    14 #{'laiying', 'tom', 'jack'}   s2集合没有发送改变
    15 #{'laiying', 'jack'}   通过交集比较,返回了一个新的元素集合,返回的是s1和s2共同拥有的元素集合
    intersection取交集元素集合
     1 l1 = ['alex', 'eric', 'jack', 'laiying',]
     2 l2 = ['jack', 'tom', 'laiying',]
     3 s1 = set(l1)
     4 s2 = set(l2)
     5 print(s1)
     6 
     7 s3 = s1.intersection_update(s2)
     8 print(s1)
     9 print(s3)
    10 
    11 #通过输出结果可以看出,s1直接更新了自己,把与传入的集合,与集合里面不相同的元素删掉,且没有返回值
    12 {'laiying', 'eric', 'alex', 'jack'}
    13 {'laiying', 'jack'}
    14 None
    indersection_update 交集更新
     1 l1 = ['alex', 'eric',]
     2 l2 = ['tom', 'jack',]
     3 s1 = set(l1)
     4 s2 = set(l2)
     5 print(s1)
     6 
     7 s3 = s1.isdisjoint(s2)
     8 print(s1)
     9 print(s3)
    10 
    11 #{'eric', 'alex'}
    12 #{'eric', 'alex'}
    13 #True
    14 
    15 #当两个集合之间没有任何交集时,就返回True,否则就返回False
    isdisjoint判断是否没有交集
     1 l1 = ['alex', 'eric', 'jack',]
     2 l2 = ['tom','laiying',]
     3 s1 = set(l1)
     4 s2 = set(l2)
     5 s3 = set(['alex', 'jack',])
     6 
     7 
     8 print(s1.issubset(s2))  #输出为False说明s1不是s2的子集
     9 print(s1.issubset(s3))  #输出False说明不是s3的子集
    10 print(s3.isdisjoint(s1)) #输出True说明s3是s1的子集
    11 
    12 #结果输出
    13 #False
    14 #False
    15 #True
    issubset 是否是子集
    1 l1 = ['alex', 'eric', 'jack',]
    2 l2 = ['tom','laiying',]
    3 s1 = set(l1)
    4 s2 = set(l2)
    5 s3 = set(['alex', 'jack',])
    6 
    7 print(s1.issuperset(s3))  #结果输出True,说明s1是s3的父集
    8 print(s3.issuperset(s1)) #结果输出False,说明s3不是s1的父集
    issuperset是否是父集
     1 #symmetric_difference,该对象返回一个新的集合,传入的元素与对象本身比较,如果传入的元素里面有的元素,而对象本身没有,则添加到对象本身集合内,最终返回一个新的集合
     2 
     3 l1 = ['alex', 'eric', 'jack',]
     4 l2 = ['tom','laiying',]
     5 s1 = set(l1)
     6 s2 = set(l2)
     7 s3 = set(['alex', 'jack',])
     8 print(s1)
     9 #结果输出 {'eric', 'alex', 'jack'}
    10 s4 = s1.symmetric_difference(s2)
    11 
    12 print(s1)
    13 #结果输出 {'eric', 'alex', 'jack'}
    14 print(s4)
    15 #结果输出{'eric', 'alex', 'tom', 'laiying', 'jack'}
    symmetric_difference 差集对比
     1 #symmetric_difference_update差集更新,直接扩展对象本身与传入集合的没有交集的元素
     2 
     3 l1 = ['alex', 'eric', 'jack',]
     4 l2 = ['tom','laiying',]
     5 s1 = set(l1)
     6 s2 = set(l2)
     7 
     8 print(s1)  #s1原始集合,结果输出 {'eric', 'alex', 'jack'}
     9 s4 = s1.symmetric_difference_update(s2)
    10 print(s1)  #s1差集后的结果输出{'laiying', 'eric', 'alex', 'jack', 'tom'}
    11 print(s4)  #该方法没有返回值  None
    s1.symmetric_difference_update 差集更新
    1 #union返回新集合,j将对象本身与传入的集合元素比较,把所有的元素重新组合成一个新的集合返回
    2 l1 = ['alex', 'eric', 'jack',]
    3 l2 = ['tom','laiying',]
    4 s1 = set(l1)
    5 s2 = set(l2)
    6 s4 = s1.union(s2)
    7 
    8 print(s1) #结果输出{'eric', 'alex', 'jack'},对象本身没有变化
    9 print(s4) #结果输出{'laiying', 'jack', 'alex', 'tom', 'eric'}
    union 返回新集合
    1 #update更新集合,将会对集合本身进行扩展,如果对象本身不存在这个传入的元素,则添加到对象本身的元素集合
    2 
    3 dic1 = {'k1':'v1', 'k2':'v2'}
    4 dic2 = {'k1':'v1', 'k2':'v2', 'k3':'v3'}
    5 s1 = set(dic1)
    6 print(s1) #结果输出{'k1', 'k2'}
    7 
    8 s2 = s1.update(dic2)
    9 print(s1)  #结果输出 {'k3', 'k1', 'k2'}
    update更新集合

    二.collections

    2.1counter计数器

    1 #创建一个Counter对象
    2 import collections
    3 obj = collections.Counter('Hello World !')
    4 print(obj)
    5 #结果输出
    6 #Counter({'l': 3, 'o': 2, ' ': 2, '!': 1, 'd': 1, 'r': 1, 'e': 1, 'W': 1, 'H': 1})
    7 
    8 #Counter会对传入参数所有元素出现的次数
     1 import collections
     2 a = collections.Counter('LaiYingaaa')
     3 print(a)
     4 #Counter({'a': 4, 'i': 2, 'L': 1, 'Y': 1, 'g': 1, 'n': 1})
     5 
     6 
     7 b = a.elements() #该方法返回的是一个迭代器,只能通过循环获取
     8 print(b)
     9 for i in a:
    10     print(i) #打印的是所有不重复的传入参数,也就是计数器对应类似字典的key
    11 #i
    12 #a
    13 #L
    14 #Y
    15 #g
    16 #n
    elements 只显示不重复的元素
    1 import collections
    2 obj = collections.Counter('Hello World !')
    3 print(obj)
    4 
    5 ret = obj.most_common(4)  #这里仅返回出现次数最多的前4个对象
    6 print(ret)
    7 
    8 #Counter({'l': 3, ' ': 2, 'o': 2, 'H': 1, 'r': 1, 'd': 1, 'W': 1, 'e': 1, '!': 1})
    9 #[('l', 3), (' ', 2), ('o', 2), ('H', 1)]
    most_common 仅返回出现次数最多的前几个对象
    1 import collections
    2 obj = collections.Counter(['11', '22','33']) #创建一个counter对象
    3 obj.subtract(['eric', '11', '11'])  #使用该属性,可以g更新技术器对象个数,如果原来有这个对象,则会减少这个对象,原来没有这个对象则返回-1,如果减少两次没有的这个对象,则返回-2,一吃类推
    4 print(obj)
    5 
    6 #Counter({'22': 1, '33': 1, '11': 1})
    7 #Counter({'33': 1, '22': 1, '11': -1, 'eric': -1})
    subtract减少对应的元素
     1  #update 更新,添加
     2 
     3 import collections
     4 obj = collections.Counter(['11', '22','33'])
     5 print(obj)
     6 obj.update(['eric', '11', '11']) 
     7 print(obj)
     8 
     9 #Counter({'11': 1, '33': 1, '22': 1})
    10 #Counter({'11': 3, '33': 1, '22': 1, 'eric': 1})

    2.2 OrderedDict 有序字典

     1 #字典是无序的,排列顺序随时都可以改变
     2 
     3 #有序字典继承了dict所有的属性方法,是针对字典类进行了扩展的一个类,可以将字典转换为有序字典
     4 import collections
     5 dic = collections.OrderedDict()  #将字典转换为有序字典
     6 # dic = dict()  #字典是无序的,排列顺序随时都可更改
     7 dic['k1'] = 'v1'
     8 dic['k2'] = 'v2'
     9 dic['k3'] = 'v3'
    10 print(dic)
    11 #OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) 当字典转换为有序字典以后,排列顺序就不会改变
  • 相关阅读:
    为什么不能直接导入Statsmodels使用?
    数据分析工作的主要内容和基本流程
    Nodejs 包与 NPM 第三方模块安装和 package.json 以及 CNPM (4)
    CommonJs 和 Nodejs 中自定义模块 (3)
    pyhthon 处理pdf 合集
    02 nodejs HTTP模块和url模块配置supervisor
    1 nodejs简介与开发环境配置
    mysql 修改root密码和禁用无密码登录配置
    floodFill填充函数函数(六)
    粗略的调整图片对比度和亮度(五)
  • 原文地址:https://www.cnblogs.com/YingLai/p/5904592.html
Copyright © 2011-2022 走看看