pyrhon學習_day20___常用模塊
一、collections模塊
在內置數據類型的基礎上(list tuple set dict str),collections模塊提供了如下幾種額外的數據類型:namedtuple deque Counter OrderDict defaultdict
1、namedtuple:生成可以使用名字訪問元素的元組,正常的元組可以通過索引進行取值,但是很難看出元組元素所表示的意義,這就是namedtuple數據類型存在的意義。其用法如下實例:
from collections import namedtuple circle = namedtuple(‘P‘,[‘x‘,‘y‘,‘r‘]) #P可以取任意變量名,無實際用處,但不可或缺 c1 =circle(2,3,5) print(c1.x) print(c1.y) print(c1.r)
2、deque:list可以高效的進行元素查找,但是對於追加和刪除元素比較困難,尤其對於列表較大時,主要是因為列表為單向序列,遵循先進先出原則,只能在列表末尾進行元素的追加(append())和刪除(pop())。而deque就是為了高效解決列表的增加和刪除元素的,除了具有append()和pop()外,還具有appendleft()和popleft()方法,可以在列表的頭部進行元素的增加和刪除。
from collections importdeque q = deque([‘a‘,‘b‘,‘c‘]) q.append(‘x‘) q.appendleft(‘y‘) print(q) #輸出結果為:deque([‘y‘, ‘a‘, ‘b‘, ‘c‘, ‘x‘]) q.pop() print(q) #輸出結果為:deque([‘y‘, ‘a‘, ‘b‘, ‘c‘]) q.popleft() print(q) #輸出結果為:deque([‘a‘, ‘b‘, ‘c‘])
3、Counter:主要用來跟蹤值出現的次數,返回無序的數據類型,用字典鍵值對進行記錄結果,其中元素為key,次數為value。
from collections import Counter c = Counter(‘abcdeabcdabcaba‘) print(c) #輸出結果為:Counter({‘a‘: 5, ‘b‘: 4, ‘c‘: 3, ‘d‘: 2, ‘e‘: 1})
4、OrderDict:使用dict時,key是無序的,無法對其進行叠代,而OrderDict可以使得其變成有序,key的順序為插入時的順序,非key本身的順序。
from collections import OrderedDict d = OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)]) #可以為這樣的形式: d = OrderedDict({‘a‘: 1, ‘b‘: 2, ‘c‘: 3}) for key in d: print(key) #輸出結果為:a b c d[‘key‘] = ‘value‘ #按照順序添加在後面 print(d) #輸出結果為:OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3), (‘key‘, ‘value‘)])
5、Defaultdict:使用dict時,當key不存在,則會返回keyerror,若希望出現此情況時返回默認值則可用defaultdict。
實例:
有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90
],將所有大於
66
的值保存至字典的第一個key中,將小於
66
的值保存至第二個key的值中。
即: {
‘k1‘
: 大於
66
,
‘k2‘
: 小於
66
}
#常規dict做法 lst= [11,22,33,44,55,66,77,88,99,90] result={} for value in lst: if value>66: if ‘k1‘ in result: result[‘k1‘].append(value) else: result[‘k1‘]=[value] if value<66: if ‘k2‘ in result: result[‘k2‘].append(value) else: result[‘k2‘]=[value] print(result)
#default方法 from collections import defaultdict lst= [11,22,33,44,55,66,77,88,99,90] result=defaultdict(list) for value in lst: if value>66: result[‘k1‘].append(value) if value<66: result[‘k2‘].append(value) print(result) #輸出結果為:defaultdict(<class ‘list‘>, {‘k2‘: [11, 22, 33, 44, 55], ‘k1‘: [77, 88, 99, 90]})
二、random模塊
1、random.random():返回大於0小於1的隨機小數
import random print(random.random())
2、random.uniform(n,m):返回大於n小於m的隨機小數
import random print(random.uniform(2,3))
3、random.randint(n,m):返回大於等於n小於等於m的隨機整數
import random print(random.randint(1,5))
4、random.randrange(n,m,2):返回大於等於n,小於m的隨機奇數
import random print(random.randrange(1,10,2))
5、random.choice(列表等可叠代對象):隨機返回一個元素
import random print(random.choice([1,10,2])) print(random.choice((1,10,2))) print(random.choice(range(10)))
6、random.sample(列表等可叠代對象,n):隨機返回n個元素
import random print(random.sample([1,10,2],2)) #返回一個列表
7、random.shuffle(list):打亂列表的順序
import random val=[1,3,5,7,9] random.shuffle(val) print(val)
生成包括數字及大小寫字母隨機驗證碼:
import random def func(n): ret=‘‘ for i in range(n): num=random.randint(0,9) alpha=chr(random.randint(97,122)) Alpha = chr(random.randint(65, 90)) val=random.choice([str(num),alpha,Alpha]) ret+=val return ret print(func(6))
三、時間time模塊
在python中常見三種表示時間的方法為:時間戳、時間元組(結構化時間)、格式化的時間字符串
1、時間戳(timestamp):通常來說,時間戳表示從1970年1月1日0時0分0秒開始時間的偏移量,單位為秒。
獲取時間戳的方法:
#(1)time.time()方式獲取當前時間戳 import time print(time.time()) #(2)利用time.mktime(結構化時間)轉化 import time time_tuple = time.localtime(1500000000)#結構化時間 print(time.mktime(time_tuple))
2、格式化的時間的字符串(format string):
格式化字符 | 意義說明 | 格式化字符 | 意義說明 |
%Y |
四位數的年份表示(000-9999) |
%B |
本地完整的月份名稱 |
%y |
兩位位數的年份表示(00-99) |
%c |
本地相應的日期表示和時間表示 |
%m |
月份(01-12) |
%j |
年內的一天(001-366) |
%d |
月內中的一天(0-31) |
%P |
本地A.M.或P.M.的等價符 |
%H |
24小時制小時數(0-23) |
%U |
一年中的星期數(00-53)星期天為星期的開始 |
%I |
12小時制小時數(01-12) |
%w |
星期(0-6),星期天為星期的開始 |
%M |
分鐘數(00=59) |
%W |
一年中的星期數(00-53)星期一為星期的開始 |
%S |
秒(00-59) |
%x |
本地相應的日期表示 |
%a |
本地簡化星期名稱 |
%X |
本地相應的時間表示 |
%A |
本地完整星期名稱 |
%Z |
當前時區的名稱 |
%b |
本地簡化的月份名稱 |
%% |
%號本身 |
獲取格式化時間字符串:
#time.strftime("格式定義","結構化時間") 結構化時間參數若不傳,則顯示當前時間 import time print(time.strftime("%Y-%m-%d %X")) #輸出結果:2017-09-12 23:21:34 print(time.strftime("%Y-%m-%d",time.localtime(1500000000))) #輸出結果:2017-07-14
3、時間元組(time_structrue):struct_time元組共有9個元素,分別為:年,月,日,時,分,秒,一年中第幾周,一年中第幾天等。
索引(Index) | 屬性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(時) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 61 |
6 | tm_wday(weekday) | 0 - 6(0表示周日) |
7 | tm_yday(一年中的第幾天) | 1 - 366 |
8 | tm_isdst(是否是夏令時) | 默認為-1 |
獲取結構化時間:
(1)利用time.localtime()或者time.gmtimei()從時間戳轉換
#time.gmtime(時間戳) UTC時間,與英國倫敦當地時間一致 import time print(time.gmtime(1500000000))
#輸出結果:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
#time.localtime(時間戳) 當地時間,例如我們現在在北京執行這個方法:與UTC時間相差8小時,UTC時間+8小時 = 北京時間 import time print(time.localtime(1500000000)) #輸出結果為:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
(2)利用time.strptime()從格式化時間的字符串轉換
#time.strptime(時間字符串,字符串對應格式) import time print(time.strptime("2017-03-16","%Y-%m-%d")) #輸出結果為:time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1) print(time.strptime("07/24/2017","%m/%d/%Y")) #輸出結果為:time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
pyrhon學習_day20___常用模塊