zoukankan      html  css  js  c++  java
  • 第 3 天 set集合 字典 队列 函数

    1、set 无序不重复集合

    1.1创建一个名为s1的set集合对象
     1 >>> s1 = set() 

    1.2向集合中添加元素add()方法:

    1 >>> s1 = set()
    2 >>> s1.add('alex')
    3 >>> s1
    4 {'alex'}
    5 >>> 

    set的应用场景:
    访问过,就把访问过的元素放入set,最后判断set中 是否存在已访问的元素!
    set的优点:
    set 访问速度快,解决的运算重复的问题!

    1 >>> l1 = ['j','k','j','o','k']
    2 >>> s2 = set(l1)
    3 >>> s2
    4 {'k', 'j', 'o'} ##移除重复元素
    5 >>>

    返回2个集合的不同元素:difference(),difference_update()

    1 >>> s2=set(['alex','jim','jim','eric','tony','alex'])
    2 >>> s2
    3 {'jim', 'eric', 'alex', 'tony'} ##使用有重复元素的列表创建set集合,set会剔除重复个数,只留单个! (移除重复元素的功能!)
    4 >>> 
    5 >>> s2.difference(['jim','eric']) ##set的difference()方法,把2 个set中的元素进行对比,返回不同的元素列表!(即创建新的集合)
    6 {'alex', 'tony'} ##返回的新的集合
    7 >>> 

    difference() 没有改变原来的集合,只是生成,并返回了一个新的集合!
    1 >>> s2 ##
    2 {'jim', 'eric', 'alex', 'tony'}
    3 ## difference_update()修改了原来s2集合的元素。修改的元素为 difference_update()的参数的不同参数!
    4 >>> s2.difference_update(['jim','eric']) ##修改后并未创建(或返回)新的集合,而是在原来集合上进行修改!
    5 >>> s2 ##原来的s2集合被修改了!
    6 {'alex', 'tony'}
    7 >>>

    difference()与 difference_update()的区别:
    difference() 没有修改原来的集合,只是返回了 不同的元素。
    difference_update()把原来的集合 修改为了 返回不同的元素的集合!

    移除元素discard()方法:

     1 >>> s1 = set(['j','k','j','o','k'])
     2 >>> s1
     3 {'o', 'j', 'k'}
     4 >>> s1.discard('o')
     5 >>> s1
     6 {'j', 'k'}
     7 >>> s1.discard('k')
     8 >>> s1
     9 {'j'}
    10 >>>

    取2 个集合的交集intersection()方法:

    1 >>> s1 = set(['j','k','j','o','k'])
    2 >>> s2 = set(['k','1','3','j'])
    3 >>> s1.intersection(s2)
    4 {'j', 'k'}
    5 >>> s2.intersection(s1)
    6 {'j', 'k'}
    7 >>>

    判断2 个集合是否有交集isdisjoint(),没有交集返回True,有交集返回False!

     1 >>> s1
     2 {'o', 'j', 'k'}
     3 >>> s2
     4 {'j', '1', 'k', '3'}
     5 >>> s3
     6 {'l', 'e', 'a', 'x'}
     7 >>> s3.isdisjoint(s1)
     8 True
     9 >>> s3.isdisjoint(s2)
    10 True
    11 >>> s1.isdisjoint(s2)
    12 False
    13 >>> s2.isdisjoint(s1)
    14 False
    15 >>> s2.isdisjoint(s3)
    16 True
    17 >>> s1.isdisjoint(s3)
    18 True
    19 >>>

    判断是否是子集 issubset():

    1 >>> s1
    2 {'o', 'j', 'k'}
    3 >>> s4 = set(['o', 'j'])
    4 >>> s4
    5 {'o', 'j'}
    6 >>> s4.issubset(s1)
    7 True
    8 >>>

    判断是否是父集issuperset():

    1 >>> s1
    2 {'o', 'j', 'k'}
    3 >>> s4
    4 {'o', 'j'}
    5 >>> s4.issuperset(s1)
    6 False
    7 >>> s1.issuperset(s4)
    8 True
    9 >>>

    移除元素,并返回移除的元素pop():

    1 >>> s3
    2 {'l', 'e', 'a', 'x'}
    3 >>> s3.pop()
    4 'l'
    5 >>> 
    6 >>> s3
    7 {'e', 'a', 'x'}
    8 >>>

    指定元素进行移除操作remove(),不返回被移除的元素:

    1 >>> s3
    2 {'e', 'a', 'x'}
    3 >>> s3.remove('a')
    4 >>> s3
    5 {'e', 'x'}

    pop() 和remove()的区别:
    pop() 移除第一个元素(从第一个元素开始移除!),并返回被移除的元素.不带参数!
    remove() 指定要移除的元素,不返回信息。需要传入指定元素作为参数


    差集symmetric_difference:

     1 >>> s1 = set(['j','3'])
     2 >>> s1
     3 {'j', '3'}
     4 >>> s2
     5 {'j', '1', 'k', '3'}
     6 >>> s1.symmetric_difference(s2)
     7 {'1', 'k'} ##返回 2 个集合相差的集合!
     8 >>> s1
     9 {'j', '3'}
    10 >>> s2
    11 {'j', '1', 'k', '3'}
    12 >>>

    difference()和symmetric_difference()的区别:

     1 >>> s1 = set(['2','3','4','5','6'])
     2 >>> s2 = set(['3','5','6','8'])
     3 >>> s1.difference(s2) ##以s1 为参考,循环s2 
     4 {'2', '4'}
     5 >>> s1.symmetric_difference(s2) ##分别以s1 、s2为参考,分别循环s1和s2
     6 {'4', '2', '8'}
     7 >>> 
     8 >>> s2.difference(s1)
     9 {'8'}
    10 >>> s2.symmetric_difference(s1)
    11 {'4', '2', '8'}
    12 >>>


    把2个集合相差的元素 更新到原来的集合中symmetric_difference_update()

     1 >>> s1
     2 {'j', '3'}
     3 >>> s2
     4 {'j', '1', 'k', '3'}
     5 >>> s1.symmetric_difference_update(s2)
     6 >>> s1
     7 {'1', 'k'}
     8 >>> s2
     9 {'j', '1', 'k', '3'}
    10 >>>


    取2 个集合的并集union():

    1 >>> s1
    2 {'1', 'k'}
    3 >>> s2
    4 {'j', '1', 'k', '3'}
    5 >>> s1.union(s2)
    6 {'1', 'k', '3', 'j'}
    7 >>>

    更新集合元素update():

     1 >>> s1
     2 {'1', 'k'}
     3 >>> s2
     4 {'j', '1', 'k', '3'}
     5 >>> s1.update(s2)
     6 >>> s1
     7 {'1', 'k', '3', 'j'}
     8 >>> s2
     9 {'j', '1', 'k', '3'}
    10 >>>

    set的应用场景:
    old_dict = {
    "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
    "#2":{ 'hostname':'h2', 'cpu_count': 2, 'mem_capicity': 80 }, ##需要删除的条目
    "#3":{ 'hostname':'h3', 'cpu_count': 2, 'mem_capicity': 80 } ##需要更新到new_dict中的条目
    }

    new_dict = {
    "#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 800 },
    "#3":{ 'hostname':'h3', 'cpu_count': 2, 'mem_capicity': 80 }, ##需要添加的条目
    "#4":{ 'hostname':'h4', 'cpu_count': 2, 'mem_capicity': 80 } ##需要更新到new_dict中的条目

    }

    old_set = set(old_dict.keys()) ##{'#2', '#1', '#3'}
    new_set = set(new_dict.keys()) ##{'#1', '#4', '#3'}

    # print(new_set)

    ##获取要更新的集合(获取new_dict和old_dict 的key的交集{'#1', '#3'})
    update_set = old_set.intersection(new_set)
    # print(update_set) ##{'#1', '#3'}


    ##old 集合和new 集合的差集 (该集合只有old集合中有,是要删除的集合)
    delect_set = old_set.symmetric_difference(update_set)
    # print(delect_set) ##{'#2'}

    ## 需要添加的集合
    add_set = new_set.symmetric_difference(update_set)
    print(add_set) ##{'#4'}

    计数器counter
    counter是对字典的补充,用于追踪值的出现次数!它具备字典的所有功能,还拥有自己的功能!

     1 import collections
     2 c = collections.Counter('symmetric_difference')
     3 print(c)
     4 Counter({'e': 4, 'c': 2, 'r': 2, 'f': 2, 'm': 2, 'i': 2, 'n': 1, 't': 1, 's': 1, 'y': 1, 'd': 1, '_': 1})
     5 
     6 for i in c.elements(): ##打印出原生字符元素
     7 print(i)
     8 r
     9 r
    10 e
    11 e
    12 e
    13 e
    14 d
    15 m
    16 m
    17 t
    18 y
    19 c
    20 c
    21 _
    22 f
    23 f
    24 i
    25 i
    26 n
    27 s
    28 for k,v in c.items(): ##统计字符
    29 print(k,v)
    30 n 1
    31 e 4
    32 c 2
    33 r 2
    34 f 2
    35 t 1
    36 s 1
    37 m 2
    38 i 2
    39 y 1
    40 d 1
    41 _ 1
     1 d = collections.Counter(['hello','piter','alex'])
     2 print(d)
     3 d.update(['hello','jac']) ##统计增加个数! (update 添加元素)
     4 print(d)
     5 Counter({'hello': 1, 'alex': 1, 'piter': 1})
     6 Counter({'hello': 2, 'jac': 1, 'alex': 1, 'piter': 1})
     7 
     8 d = collections.Counter(['hello','piter','alex']) (删除元素)
     9 d.subtract(['hello','aliba'])
    10 print(d)
    11 Counter({'piter': 1, 'alex': 1, 'hello': 0, 'aliba': -1})


    有序字典orderedDict

     1 dic = collections.OrderedDict()
     2 
     3 dic['k1']='v1'
     4 dic['k2']='v2'
     5 dic['k3']='v3'
     6 
     7 print(dic)
     8 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
     9 print(dic.pop('k2')) ##获取对应值
    10 v2
    11 dic.popitem()
    12 print(dic)
    13 OrderedDict([('k1', 'v1'), ('k2', 'v2')])
    14 
    15 dic.update({'k1':'kk','k4':'78'}) ##更新字典
    16 print(dic)
    17 OrderedDict([('k1', 'v1'), ('k2', 'v2')])
    18 OrderedDict([('k1', 'kk'), ('k2', 'v2'), ('k4', '78')])


    9、默认字典

     1 s1 = "{name} is {age}"
     2 l = ["jima","sa"]
     3 
     4 ret = s1.format(name='alex',age='16')
     5 
     6 print(ret)
     7 s1 = "{name} is {age}"
     8 l = ["jima","sa"]
     9 d = {'name':'jima','age':19}
    10 # ret = s1.format(name='alex',age='16')
    11 ret = s1.format(**d) ##使用 2 个*号作参数
    12 print(ret)
    13 jima is 19
    14 
    15 lambda表达式:
    16 func = lambda a:a+1 ## a为形参
    17 r = func(3) 
    18 print(r)
    19 4

    10、可命名元组

    1 import collections
    2 Mytclass = collections.namedtuple('Mytclass',['x','y','z'])
    3 obj = Mytclass(1,3,4)
    4 print(obj.x)
    5 print(obj.y)
    6 print(obj.z)
    7 1
    8 3
    9 4

    11、队列

     1 import collections
     2 
     3 d = collections.deque()
     4 d.append('1')
     5 d.appendleft('10')
     6 d.appendleft('1')
     7 print(d)
     8 
     9 deque(['1', '10', '1'])
    10 
    11 c = d.count('1') ##统计 “1” 元素出现次数
    12 print(c)
    13 2
    14 
    15 d.extend(['ss','sdw']) ##扩展
    16 deque(['1', '10', '1', 'ss', 'sdw'])
    17 
    18 
    19 print(d)
    20 d.rotate(2) ##从队列后边取2 个元素放到队列前边
    21 print(d)
    22 deque(['1', '10', '1', 'ss', 'sdw'])
    23 deque(['ss', 'sdw', '1', '10', '1'])


    12、单向队列

    1 import queue
    2 q = queue.Queue() ##创建一个单向队列
    3 q.put('hello')
    4 q.put('dw')
    5 print(q.qsize())
    6 2
    7 print(q.get()) ##先进先出
    8 hello

    函数:
    result =Ture
    try :
    ...
    except Exception:
    result = False
    return result

    遇到reture时,函数就结束。retrue以下代码就不会执行了!

    函数的默认参数:

     1 def show (a1,a2=777): ##a2 = 777为默认参数
     2 print(a1,a2)
     3 
     4 show('s')
     5 s 777
     6 def show (a1,a2=777): ##默认参数放在最后
     7 print(a1,a2)
     8 
     9 show('s','aaa')
    10 s aaa
    11 
    12 指定参数:
    13 def show(a1,a2):
    14 print(a1,a2)
    15 
    16 show (a2=121,a1=777) ##指定参数
    17 777 121

    动态参数:

     1 def show(*arg): ##1个* 时,转换为元组
     2 print(arg,type(arg))
     3 
     4 show(1) ##(1,) <class 'tuple'>
     5 show(1,2,3,4,55,4) ##(1, 2, 3, 4, 55, 4) <class 'tuple'>
     6 
     7 def show(**arg): ##2 个* 时,转换为字典
     8 print(arg,type(arg))
     9 show(n1=1,n2=4) ##{'n1': 1, 'n2': 4} <class 'dict'>
    10 
    11 def show(*args,**kwargs): ##组合使用
    12 print(args,type(args))
    13 print(kwargs,type(kwargs))
    14 show(1,2,3,n1=5,n2=11)
    15 
    16 (1, 2, 3) <class 'tuple'>
    17 {'n1': 5, 'n2': 11} <class 'dict'>
    18 
    19 def show(*args,**kwargs):
    20 print(args,type(args))
    21 print(kwargs,type(kwargs))
    22 l = [11,22,33]
    23 d = {'a':'7','b':'77'}
    24 show(l,d)
    25 ([11, 22, 33], {'a': '7', 'b': '77'}) <class 'tuple'>
    26 {} <class 'dict'>
    27 
    28 def show(*args,**kwargs):
    29 print(args,type(args))
    30 print(kwargs,type(kwargs))
    31 l = [11,22,33]
    32 d = {'a':'7','b':'77'}
    33 show(*l,**d) ##对应的参数要加对应的*
    34 (11, 22, 33) <class 'tuple'>
    35 {'a': '7', 'b': '77'} <class 'dict'>

    使用动态参数实现字符串格式化:

    1 s1 = "{0} is {1}"
    2 l = ["jima","sa"]
    3 
    4 ret = s1.format(*l) ##使用1 个*号作参数
    5 
    6 print(ret) ##jima is sa
    7 jima is sa
  • 相关阅读:
    Linux(Centos7)yum安装最新redis
    refresh table tablename ;MSCK REPAIR TABLE table_name;
    整个shuffle的流程图
    Vim简明教程
    centos vim 7.3 升级 + vim 简单配置文件
    Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
    python——修饰符
    转——《将人性置之死地而后生》刘夙
    各学科领域入门书籍推荐
    python——关于Python Profilers性能分析器
  • 原文地址:https://www.cnblogs.com/zhang252709/p/5180871.html
Copyright © 2011-2022 走看看