collections, time, queue的應用

collections  (克來克深思)python

Counter
from collections import Counter # 引入模塊, 計數器 Counter(康特)
s = 'sadfasdfasdfasdgha'
c = Counter(s)#給了可迭代就能用
print(c)
deque
from collections import deque   引入模塊 
d = deque()  # 建立雙向隊列
d.append("李茶的姑媽") # 默認在右側添加
d.append("無雙")
d.append("影")
d.append("找到你")
#讓悲傷逆流成河, 理查的姑媽, 無雙, 影, 找到你
print(d)
d.appendleft("讓悲傷逆流成河") # 左側添加   appendleft(額盤的萊福特)
print(d)

print(d.pop()) # 從右邊刪除
print(d.pop()) # 從右邊刪除
print(d.popleft()) # 從左邊刪除  跑破萊福特
print(d.pop()) # 從右邊刪除
print(d)

  

namedtuple   (內幕的他跑)命名元組
from collections import namedtuple  引入模塊
po = namedtuple("Point", ["x", "y"]) # 定義了簡單的類-lambda
p = po(1, 2) # 命名元組
print(p)

  

OrderedDict  (奧德DA科特)  字典的key默認是⽆無序的. ⽽而OrderedDict是有序的
py3.6以上使用的是新算法. 來自於pypy. 節約20-30%內存
d = {"a":1,"b":2,"c":3}
print(d)
from collections import OrderedDict
od = OrderedDict({"a":1,"b":2,"c":3})
print(od)
print(od.get("b"))
print(od["b"])

  

defaultdict    (的否特DA科特)能夠給字典設置默認值. 當key不存在時. 直接獲取默認值:
from collections import defaultdict  
d = defaultdict(list) # {} list() 必須是callable
d['劉偉'] = "奧特曼"
print(d['大陽哥']) # 當key不存在的時候. 返回默認值.其實就是callable()
print(d['劉偉'])

lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
dic = {}
for el in lst:
    if el > 66:
        dic.setdefault("key1", []).append(el)
    else:
        dic.setdefault("key2", []).append(el)
print(dic)


lst = [11, 22, 33, 44, 55, 66, 77, 88, 99]
dd = defaultdict(list)
for el in lst:
    if el > 66:
        dd['key1'].append(el)
    else:
        dd['key2'].append(el)
print(dd)

  

---------------------------------------------------------------------------------------------------------------------------算法

棧和隊列shell

隊列: 先進後出.  First In First Out      簡稱FIFO數據庫

import queue  引入模塊
q = queue.Queue()#建立隊列
q.put('alex')#放入元素
q.put('wupeiqi')

print(q.get())獲取元素
print(q.get())  若是阻塞了,在等下一個元素  input()

  

棧:  先進後出.  First In Last Out      簡稱FILO bash

裝饅頭的桶
1. 入棧
2. 出棧
屬性: 1. 列表(容器) 2.大小(size) 3. 棧頂指針(下一個裝元素的位置)
class StackFullError(Exception):
    pass
class StackEmptyError(Exception):
    pass
class Stack:
    def __init__(self, size):
        self.index = 0  #  棧頂指針
        self.size = size
        self.lst = []  # 容器

    def push(self, el):
        if self.index < self.size:  #  尚未裝滿
            self.lst.insert(self.index, el)
            self.index += 1
        else:   # 裝滿了
            raise StackFullError("the stack is full!")

    def pop(self):
        if self.index > 0:
            self.index -= 1
            return self.lst[self.index]
        else:
            raise StackEmptyError("the stack is empty!")
    def clear(self):#清空
        self.lst.clear()
        self.index = 0
    def __sizeof__(self):
        return self.index-1
    def max(self):
        return self.size
    def now(self):
        return self.index
# 使用
# 1.實例化棧
s = Stack(5)
s.push("饅頭1")
s.push("饅頭2")
s.push("饅頭3")
s.push("饅頭4")

print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())

  

  

-----------------------------------------------------------------------------------------------------------app

time(重點(太木))dom

當前系統時間 1538970854.5946708 float 時間戳. 給機器用的.數據庫有的時候存儲的是時間戳ide

以 1970-01-01 00:00:00 原點. 每一秒一個數字.spa

%y 兩位數的年份表示  (00-99)
%Y 四位數的年份表示  (000-9999)
%m 月份(01-12%d 月內中的一天(0-31%H 24小時制小時數(0-23%I 12小時制小時數(01-12%M 分鐘數(00=59%S 秒(00-59%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的⽉月份名稱
%B 本地完整的⽉月份名稱
%c 本地相應的⽇日期表示和時間表示
%j 年年內的⼀一天(001-366%p 本地A.M.或P.M.的等價符
%U 一年年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年年中的星期數(00-53)星期⼀一爲星期的開始
%x 本地相應的⽇日期表示
%X 本地相應的時間表示
%z 當前時區的名稱
%% %號自己
日期格式化的標準
s = time.strftime("%Y-%m-%d %H:%M:%S")
print(s)

  

import time
18888888888 時間戳 ->結構化時間 -> 格式化時間
把時間戳 -> 結構化時間
f = 18888888888
st = time.localtime(f)  樓口貪慕
print(st)
# 把結構化時間 -> 格式化結構時間
t = time.strftime("%Y/%m/%d %H:%M:%S",st) # f: format 格式化   
print(t)

# 用戶輸入了一個時間 2018-09-08 11:22:36   - 存儲 時間戳
# 先把格式化時間 -> 結構化時間
s = "2018-09-08 11:22:36"
st = time.strptime(s , "%Y-%m-%d %H:%M:%S") # p:parse 轉換
# 結構化時間 -> 轉化成時間戳 1536376956
t = time.mktime(st) #
print(t)

  

--------------------------------------------------------------
os模塊
os.makedirs('dirname1/dirname2') 可⽣生成多層遞歸⽬目錄
os.removedirs('dirname1') 若⽬目錄爲空,則刪除,並遞歸到上⼀一級⽬目錄,如若也爲空,則刪
除,依此類推
os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname
os.rmdir('dirname') 刪除單級空目錄,若目錄不不爲空則⽆沒法刪除,報錯;至關於shell中
rmdir dirname
os.listdir('dirname') 列列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列列表方式
打印
os.remove() 刪除一個⽂文件
os.rename("oldname","newname") 重命名⽂文件/⽬目錄
os.stat('path/filename') 獲取⽂文件/⽬目錄信息
os.system("bash command") 運⾏行行shell命令,直接顯示
os.popen("bash command).read() 運⾏行行shell命令,獲取執⾏行行結果
os.getcwd() 獲取當前⼯工做⽬目錄,即當前python腳本⼯工做的⽬目錄路路徑
os.chdir("dirname") 改變當前腳本⼯工做⽬目錄;至關於shell下cd
# os.path
os.path.abspath(path) 返回path規範化的絕對路路徑
os.path.split(path) 將path分割成⽬目錄和⽂文件名⼆二元組返回
os.path.dirname(path) 返回path的⽬目錄。其實就是os.path.split(path)的第⼀一個元素
os.path.basename(path) 返回path最後的⽂文件名。如何path以/或\結尾,那麼就會返回空值。
即os.path.split(path)的第⼆二個元素
os.path.exists(path) 若是path存在,返回True;若是path不不存在,返回False
os.path.isabs(path) 若是path是絕對路路徑,返回True
os.path.isfile(path) 若是path是⼀一個存在的⽂文件,返回True。不然返回False
os.path.isdir(path) 若是path是⼀一個存在的⽬目錄,則返回True。不然返回False
os.path.join(path1[, path2[, ...]]) 將多個路路徑組合後返回,第⼀一個絕對路路徑以前的參數
將被忽略略
os.path.getatime(path) 返回path所指向的⽂文件或者⽬目錄的最後訪問時間
os.path.getmtime(path) 返回path所指向的⽂文件或者⽬目錄的最後修改時間
os.path.getsize(path) 返回path的⼤大⼩小
# 特殊屬性:
os.sep 輸出操做系統特定的路路徑分隔符,win下爲"\\",Linux下爲"/"
os.linesep 輸出當前平臺使⽤用的⾏行行終⽌止符,win下爲"\r\n",Linux下爲"\n"
os.pathsep 輸出⽤用於分割⽂文件路路徑的字符串串 win下爲;,Linux下爲:
os.name 輸出字符串串指示當前使⽤用平臺。win->'nt'; Linux->'posix'
os模塊

-----------------------------------------------------------------
import random
print(random.random()) #  0-1小數  想辦法完成[1,100]之間的隨機整數
print(random.uniform(1, 3)) # 1-3之間的小數

print(random.randint(1, 36)) # [1,36]隨機整數
print(random.randrange(1, 5, 3)) # [1, 5) 步長是3


print(random.choice(["馬化騰", ["倚天屠龍記", "天龍八部", "射鵰"], "張無忌", "周伯通", "劉偉"])) # 隨機選一個
print(random.sample(["劉偉", "大陽哥", "大豬蹄子", "胡辣湯"], 3))
print(random.sample(list(range(1,37)), 7))


lst = [1,2,3,4,5,5,6,7,8,9,]
random.shuffle(lst) # 洗牌
print(lst)
相關文章
相關標籤/搜索