collections模块 1.namedtuple(具名元组) 生成可以使用名字来访问的元素的tuple 例如表示坐标x为1 y为2的坐标 使用from collections import namedtuple来到导入模块 from collections import namedtuple # 导入模块
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