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