• collections time模块


    collections模块

    1.namedtuple(具名元组)

    生成可以使用名字来访问的元素的tuple 例如表示坐标x为1 y为2的坐标

    使用from collections import namedtuple来到导入模块

    from collections import namedtuple # 导入模块去
    res = namedtuple('位置',['x','y','z']) # 参数二可以填可迭代对象 参数一是一个名字
    或者
    res = namedtuple('位置','x y z') # 可以使用字符串 但是中间要用空格隔开
    A = res(123,124,125)   # 注意元素个数必须要和namedtuple一直 不然会报错
    print(A)  >>>> 位置(x=123,y=124,z=125)
    print(A.x) >>> 123
    print(A.y) >>> 124
    print(A.z) >>> 125
    

    2.queue队列

    队列:先进先出 (FIFO first in first out)

    import queue #导入模块
    q = queue.Queue() #生成队列对象
    q.put('first') #往队列里面放值
    q.put('second') #继续往里面放值
    print(q) >>>>   <queue.Queue object at 0x000001B0F3F37550>
    得到一个对象地址 需要使用get方法来得到
    print(q.get())  # 向队列要值
    print(q.get())
    print(q.get())  # 如果队列中的值取完了 程序会在原地等待 直到从队列中拿到值为止
    

    3.deque双端队列

    使用list存储数据的时候虽然按索引取值很快 但是删除和插入元素就很慢了 可以使用deque模块来快速插入删除 方法 加入末尾append 加入开头appendleft 删除末尾pop 删除开头popleft 中间插入 insert

    from collections import deque # 导入模块
    res = [1,2,3,4,5] #生成一个列表
    res2 = deque(res)    
    print(res2) >>>>> deque([1,2,3,4,5])
    res2.append('这里是右边')
    res2.appendleft('这里是左边')
    print(res2)  >>>>>>deque(['这里是左边', 1, 2, 3, 4, 5, '这里是右边'])
    # 使用删除方法左右两边都删除
    res2.pop()
    res2.popleft()
    print(res2)  >>>>>deque([1,2,3,4,5])
      
    

    队列不应该支持任意位置的插入 只能首尾插入 特殊点 双端队列可以根据索引在任何位置插入

    res2.insert(1,'hello')
    print(res2) >>>>>deque[1,'hello',2,3,4,5]
    

    4.OrderedDict

    使用字典时,key是无序的.在对字典做迭代的时候,我们无法确定Key的顺序.如果需要key保持顺序的话,可以使用 OrderedDict

    from collections import OrderedDict
    a = OrderedDict([('a',1),('b',2),('c',3)]) # 生成一个key有序的字典
    
    注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
    >>> od = OrderedDict()
    >>> od['z'] = 1
    >>> od['y'] = 2
    >>> od['x'] = 3
    >>> od.keys() # 按照插入的Key的顺序返回
    ['z', 'y', 'x']
    

    5.defaultdict

    使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用`defaultdict'# key不存在,返回默认值

    from collections import defaultdict
    values = [11, 22, 33,44,55,66,77,88,99,90]
    my_dict = defaultdict(list)
    for value in  values:
        if value>66:
            my_dict['k1'].append(value)
        else:
            my_dict['k2'].append(value)
    

    6.Counter()将每一个字符的个数用一个字典表示出来{字符:个数}

    from collections import Counter
    s = 'abcdeabcdabcaba'
    res = Counter(s)
    print(res)
    
    >>>Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
    

    二.时间模块time

    1.时间模块的三种表现形式 1.时间戳 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 2格式化(给他们看的) 3.结构化时间

    import time
    print(time.time()) # 来看时间戳
    

    2.格式化时间

    import time 
    print(time.strftime('%Y %m %d %H%M%S'))
    print(time.strftime('%Y-%m-%d %X'))  # %X等价于%H:%M:%S
    

    3.结构化时间

    import time
    print(time.localtime())
    
    >>>time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=20, tm_min=20, tm_sec=45, tm_wday=3, tm_yday=199, tm_isdst=0)
    
    

    datetime

    import datetime
    print(datetime.date.today())  # date>>>:年月日
    print(datetime.datetime.today())  # datetime>>>:年月日 时分秒
    res = datetime.date.today()
    print(res.year)
    print(res.month)
    print(res.day)
    print(res.weekday())  # 0-6表示星期  0表示周一
    print(res.isoweekday())  # 1-7表示星期 7就是周日
    
    """
    (******)
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象
    """
    current_time = datetime.date.today()  # 日期对象
    timetel_t = datetime.timedelta(days=7)  # timedelta对象
    res1 = current_time+timetel_t  # 日期对象
    
    # UTC时间
    dt_today = datetime.datetime.today()
    dt_now = datetime.datetime.now()
    dt_utcnow = datetime.datetime.utcnow()
    print(dt_utcnow,dt_now,dt_today)
    >>>>2019-07-18 12:42:21.087353
            2019-07-18 20:42:21.087353 
                    2019-07-18 20:42:21.087353
    
    趁自己还没死 多折腾折腾
  • 相关阅读:
    The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make s
    ScrollView 定位
    Fragment获取Activity,Activity获取Fragment
    Popupwindow全屏问题
    bzoj千题计划310:bzoj5285: [Hnoi2018]寻宝游戏(思维题+哈希)
    bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
    2016vijos 1-3 兔子的晚会(生成函数+倍增FWT)
    bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
    bzoj千题计划307:bzoj5248: [2018多省省队联测]一双木棋
    cdqz2017-test10-加帕里图书馆(区间DP & 简单容斥)
  • 原文地址:https://www.cnblogs.com/lddragon/p/11209935.html
Copyright © 2020-2023  润新知