python內置數據結構

bytes、bytearray
bytes:

不可變字節序列
bytearray:

字節數組
可變
字符串與bytes

字符串是字符組成的有序序列,字符可以使用編碼來理解
bytes是字節組成的有序的不可變序列
bytearray是字節組成的有序的可變序列
編碼與解碼

字符串按照不同的字符集編碼encode返回字節序列bytes
encode(encoding='utf-8', errors='strict') -> bytes
字節序列按照不同的字符集解碼decode返回字符串
bytes.decode(encoding="utf-8", errors="strict") -> str
bytearray.decode(encoding="utf-8", errors="strict") -> str
Python第二週 學習筆記(2)

bytes定義

bytes() 空bytes
bytes(int) 指定字節的bytes,被0填充
bytes(iterable_of_ints) -> bytes [0,255]的int組成的可迭代對象
bytes(string, encoding[, errors]) -> bytes 等價於string.encode()
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 從一個字節序列或者buffer複製出
一個新的不可變的bytes對象
使用b前綴定義
只允許基本ASCII使用字符形式b'abc9'
使用16進製表示b"\x41\x61"
bytes操作

bytes.fromhex(string)
string必須是2個字符的16進制的形式,'6162 6a 6b',空格將被忽略
hex()
返回16進製表示的字符串
索引
b'abcdef'[2] 返回該字節對應的數,int類型
bytearray定義

bytearray() 空bytearray
bytearray(int) 指定字節的bytearray,被0填充
bytearray(iterable_of_ints) -> bytearray [0,255]的int組成的可迭代對象
bytearray(string, encoding[, errors]) -> bytearray 近似string.encode(),不過返回可變對象
bytearray(bytes_or_buffer) 從一個字節序列或者buffer複製出一個新的可變的bytearray對象
注意,b前綴定義的類型是bytes類型
bytearray操作

和bytes類型的方法相同
bytearray(b'abcdef').replace(b'f',b'k')
bytearray(b'abc').find(b'b')
類方法 bytearray.fromhex(string)
string必須是2個字符的16進制的形式,'6162 6a 6b',空格將被忽略
bytearray.fromhex('6162 09 6a 6b00')
hex()
返回16進製表示的字符串
bytearray('abc'.encode()).hex()
索引
bytearray(b'abcdef')[2] 返回該字節對應的數,int類型
append(int) 尾部追加一個元素
insert(index, int) 在指定索引位置插入元素
extend(iterable_of_ints) 將一個可迭代的整數集合追加到當前bytearray
pop(index=-1) 從指定索引上移除元素,默認從尾部移除
remove(value) 找到第一個value移除,找不到拋ValueError異常
注意:上述方法若需要使用int類型,值在[0, 255]
clear() 清空bytearray
reverse() 翻轉bytearray,就地修改
切片操作
可迭代 for ... in
len()可以獲取長度
通過下標可以訪問
可以切片
如:列表、元組、字符串、bytes、bytearray、set、dict
切片

通過索引區間訪問線性結構的一段數據
sequence[start:stop] 表示返回[start, stop)區間的子序列
支持負索引
start爲0,可以省略
stop爲末尾,可以省略
超過上界(右邊界),就取到末尾;超過下界(左邊界),取到開頭
start一定要在stop的左邊
[:] 表示從頭至尾,全部元素被取出,等效於copy()方法
步長切片

[start:stop:step]
step爲步長,可以正、負整數,默認是1
step要和start:stop同向,否則返回空序列
IPython使用
幫助

?
ipython自帶操作文檔
help(name)
查詢指定名稱的幫助
obj?
列出obj對象的詳細信息
obj??
列出更加詳細的信息
特殊變量


前一次輸出
""
倒數第二次輸出
"
"
倒數第三次輸出
_dh
路徑歷史
_oh
輸出歷史
shell命令

!command
執行shell命令
魔術方法

使用%百分號開頭的,IPython內置的特殊方法
%magic 格式
% 開頭是line magic
%% 開頭是 cell magic,notebook的cell
%alias 定義一個系統命令的別名
%timeit statement
-n 一個循環loop執行語句多少次
-r 循環執行多少次loop,取最好的結果
%%timeit setup_code
code..
%cd 改變當前工作目錄,cd可以認爲是%cd的鏈接。路徑歷史在_dh中查看
%pwd、pwd 顯示當前工作目錄
%ls 、ls 返回文件列表
%%js、%%javascript 在cell中運行js腳本
%%js
alert('a'+1)
封裝和解構
封裝

將多個值使用逗號分割,組合在一起
本質上,返回一個元組,只是省掉了小括號
解構

把線性結構的元素解開,並順序的賦給其它變量
左邊接納的變量數要和右邊解開的元素個數一致
使用 變量名 接收,但不能單獨使用
變量名 收集後組成一個列表
如果不關心一個變量,就可以定義改變量的名字爲_
這是一個慣例,是一個不成文的約定,不是標準
_是一個合法的標識符,也可以作爲一個有效的變量使用,但是定義成下劃線就是希望不要被使用,除非你明確的知道這個數據需要使用
總結

_ 這個變量本身無任何語義,沒有任何可讀性,所以不是用來給人使用的
Python中很多庫,都使用這個變量,使用十分廣泛。請不要在不明確變量作用域的情況下,使用 導致和庫中 衝突
set
可變的、無序的、不重複的元素的集合
初始化

set() -> new empty set object
set(iterable) -> new set object
set的元素

set的元素要求必須可以hash
目前學過的不可hash的類型有list、set
元素不可以索引
set可以迭代
set增加

add(elem)
增加一個元素到set中
如果元素存在,什麼都不做
update(*others)
合併其他元素到set集合中來
參數others必須是可迭代對象
就地修改
set刪除

remove(elem)
從set中移除一個元素
元素不存在,拋出KeyError異常
discard(elem)
從set中移除一個元素
元素不存在,什麼都不做
pop() -> item
移除並返回任意的元素
空集返回KeyError異常
clear()
移除所有元素
成員運算符

in 和 not in 判斷元素是否在set中
set和線性結構

set、dict等結構,內部使用hash值作爲key,時間複雜度可以做到O(1),查詢時間和數據規模無關
可hash
數值型int、float、complex
布爾型True、False
字符串string、bytes
tuple
None
以上都是不可變類型,成爲可哈希類型,hashable
set的元素必須是可hash的
集合運算

並集

union(others)
返回和多個集合合併後的新的集合
| 運算符重載
等同union
update(
others)
和多個集合合併,就地修改
|=
等同update
交集

intersection(others)
返回和多個集合的交集
&
等同intersection
intersection_update(
others)
獲取和多個集合的交集,並就地修改
&=
等同intersection_update
差集

difference(others)
返回和多個集合的差集
_
等同difference
difference_update(
others)
獲取和多個集合的差集並就地修改
-=
等同difference_update
對稱差集

集合A和B,由所有不屬於A和B的交集元素組成的集合,記作(A-B)∪(B-A)
symmetric_differece(other)
返回和另一個集合的差集
^
等同symmetric_differece
symmetric_differece_update(other)
獲取和另一個集合的差集並就地修改
^=
等同symmetric_differece_update
issubset(other)、<=
判斷當前集合是否是另一個集合的子集
set1 < set2
判斷set1是否是set2的真子集
issuperset(other)、>=
判斷當前集合是否是other的超集
set1 > set2
判斷set1是否是set的真超集
isdisjoint(other)
當前集合和另一個集合沒有交集
沒有交集,返回True

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章