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.结构化时间

collections time模块

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 Libra Blockchain机翻及整理


下一篇:java面试题:res初值为0,接着for循环10次后,res+=res++?最后res等于多少