1. 程式人生 > >pyrhon學習_day20___常用模塊

pyrhon學習_day20___常用模塊

jti tlb mon 例如 序列 鍵值 mktime circle 轉換

一、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 import
deque 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___常用模塊