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'
-----------------------------------------------------------------
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)