• 内置模块


    1.容器元素模块---collections

    1 Counter--计数器
     Counter是dict的子类,用于计数**可哈希对象**。它是一个无序的容器,元素被存储为字典键,它们的计数被存储为字典值。计数允许包括零或负计数的任何整数值
    

    方法
    dict的子类所有字典支持的方法都支持(除了fromkeys 和update,这两个工作方式和计数器不同),并且还支持其他的三种新方法
    Counter.most_common(n) 返回计数最多的n个元素,,列表套元组形式,
    counter.elements() 返回一个迭代器,对元素重复迭代其计数次。元素以随机顺序返回。如果元素的计数小于1,elements()将忽略它。
    subtract([iterable-or-mapping]) 从一个可迭代对象或从另一个映射(或计数器)中减去元素。类似dict.update(),但减去计数,而不是替换它们。输入和输出都可以为零或负。

    
    几个数学运算被提供以组合Counter对象来产生multisets(计数器大于零的计数器)。加法和减法通过相加或相减相应元素的计数来组合计数器。交集和并集返回相应计数的最小值和最大值。每个操作的输入都可以接受带有符号的计数,但输出将排除计数为零或更少的结果。
    >>> c = Counter(a=3, b=1)
    >>> d = Counter(a=1, b=2)
    >>> c + d                       # add two counters together:  c[x] + d[x]
    Counter({'a': 4, 'b': 3})
    >>> c - d                       # subtract (keeping only positive counts)
    Counter({'a': 2})
    >>> c & d                       # intersection:  min(c[x], d[x]) 
    Counter({'a': 1, 'b': 1})
    >>> c | d                       # union:  max(c[x], d[x])
    Counter({'a': 3, 'b': 2})
    
    
    使用计数器对象的常见模式:
    
    sum(c.values())                 # total of all counts
    c.clear()                       # reset all counts
    list(c)                         # list unique elements
    set(c)                          # convert to a set
    dict(c)                         # convert to a regular dictionary
    c.items()                       # convert to a list of (elem, cnt) pairs
    Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
    c.most_common()[:-n-1:-1]       # n least common elements
    +c                              # remove zero and negative counts
    

    2 namedtuple 命名元组
    命名元组赋予元组中的每个位置一定的含义,允许更具可读性、自带文档的代码。它们可以用作常规元组可以使用的任何地方,并且它们添加能够按名称而不是位置索引字段的能力。
    collections.namedtuple(typename, field_names, verbose=False, rename=False)
    返回一个叫做typename的新的元组子类。这个新的子类用来创建类元组对象,这个对象拥有可以通过属性访问的字段,并且可以通过下标索引和迭代。这个子类的实例还拥有十分友好的文档字符串(包括类型名和字段名)和十分好用的__repr__() 方法,以name=value的方式列出了元组中的内容。

    tu = namedtuple("test",["x","y","c","a"])  # 定义一个命名元组类
    tu1 = tu(12,23,45,56)  # 实例化一个 命名元组
    print(tu1) #打印查看
    print(tu1[0],tu1.x) # 命名元组内元素可按索引或.name取值
    
    

    3 deque ---双向队列
    一个能在“队列”两端快速出队、入队的,类似于队列的(list-like)的容器 (译者注:就是双向队列)
    拥有列表的所有操作,并且添加了在左侧操作的方法,添加了rotate方法

    s="asdfhgfgasdawefadca"
    d1= deque(s)
    print(d1)
    d1.popleft()
    print(d1)
    d1.rotate(3)
    print(d1)
    d1.rotate(-5)
    print(d1)
    
    

    4defaultdict 调用一个工厂函数来为dict的values缺失提供值
    使用示例

    使用list作为default_factory,可以很容易地将一系列键值对分组为一个值为列表字典:
    >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    >>> d = defaultdict(list)
    >>> for k, v in s:
    ...     d[k].append(v)
    ...
    >>> sorted(d.items())
    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    
    当每个键第一次遇到时,它不在映射中;因此使用返回空list的default_factory函数自动创建一个条目。然后,list.append()操作将值附加到新列表。当再次遇到这个键时,查找正常继续(返回该键的列表),并且list.append()操作向列表中添加另一个值。这种技术比使用等效的dict.setdefault()技术更简单和更快:
    

    2 时间模块

    # print(datetime.now())  #2019-03-20 11:35:25.(471359)毫秒
    # 时间对象
    
    # f = datetime.timestamp(datetime.now())  # 将时间对象转换成时间戳
    # print(datetime.fromtimestamp(f))        # 将时间戳转成时间对象
    
    
    # print(datetime.strptime('2018-11-30','%Y-%m-%d'))
    # # 将字符串转成时间对象
    # f = datetime.now()
    # print(datetime.strftime(f,'%Y-%m-%d'))
    # 将时间对象转成字符串
    
    from datetime import datetime,timedelta  # 从xx导入 建议
    print(datetime.now() - timedelta())
    # 这个是datetime的精华
    
    

    3 #time 模块

    
    import time
    # print(time.time()) # 浮点型(小数)  给计算机看 计算
    # 三种:
    # 时间戳 time.tiem
    # 结构化时间 修改
    # 字符串时间 给人看的
    
    # print(time.localtime())
    # 命名元组 :time.struct_time(tm_year=2019, tm_mon=3, tm_mday=20, tm_hour=10,
    # tm_min=21, tm_sec=36, tm_wday=2, tm_yday=79, tm_isdst=0)
    
    # print(time.strftime('%Y-%m-%d %X'))
    # print(time.strftime('%Y-%m-%d %H:%M:%S'))
    # 字符串时间
    
    # 1.先转换成结构化时间
    # 2.结构化转成字符串
    
    # print(time.localtime(time.time()))
    # f = time.localtime(time.time() - 86000 * 3)  # 150000000 秒  86000
    # print(time.strftime('%Y-%m-%d %H:%M:%S',f))
    # print(time.strftime('%Y-%m-%d %X',f))
    
    # '2018-11-30 12:30'
    
    # print(type(time.strftime('%Y-%m-%d %X')))
    
    # f = time.strptime('2018-11-30 12:30','%Y-%m-%d %H:%M')
    # # 支持索引 和.点的方法
    # new_time = time.mktime(f) + 2*3600
    # new_t = time.localtime(new_time)
    # print(time.strftime('%Y-%m-%d %H:%M:%S',new_t))
    
    # 时间戳 -- 结构化时间
    # 结构化时间 -- 字符串时间
    
    # 字符串时间 -- 结构化时间
    # 结构化时间 -- 时间戳
    # f = time.localtime()
    # print(time.strftime('%X %Y-%m-%d',f))
    
    
    t = '2019-03-20 10:40:00'
    # 这个时间向后退一个月
    # # 1.转成结构化
    # f = time.strptime(t,'%Y-%m-%d %X')
    # # 2.结构化时间转成时间戳
    # ts = time.mktime(f)
    # # 3.将时间戳向大变
    # new_ts = ts + 86400 * 30
    # # 4.将最新的时间戳转成结构化时间
    # new_f = time.localtime(new_ts)
    # # 5.将结构化时间转成字符串时间
    # print(time.strftime('%Y-%m-%d %X',new_f))
    
    # 获取当前时间求前一月的现在时间
    # 1.获取时间戳进行减法计算
    # new_ts = time.time() - 30*86400
    # # 2.最新的时间戳转成结构化时间
    # new_f = time.localtime(new_ts)
    # # 3.将结构化时间转成字符串时间
    # print(time.strftime('%Y-%m-%d %X',new_f))
    
    # time.strftime()
    
    # 总结:
    #     6个
    #       时间戳 -- 结构化   1    ****
    #       结构化 -- 时间戳   1    ****
    #       结构化 -- 字符串   1    ****
    #       字符串 -- 结构化   1    ****
    #       # time.time()     1 # 获取当前时间戳
    #       # strftime()      1 # 获取当前字符串时间
    
    # strftime('格式','结构化时间')  # 格式可以少写
    # strptime('字符串时间','格式')  # 格式一一对应
    
    
  • 相关阅读:
    9.19题解
    9.18题解
    改码风
    找到了几个好的网站
    题目链接
    二分上机训练题解
    二分例题简单说明
    贪心上机训练题解
    贪心算法例题简单说明
    Johnson法则证明
  • 原文地址:https://www.cnblogs.com/bigcatbc/p/10566406.html
Copyright © 2020-2023  润新知