Python基礎(雜項)

筆記

字符串與編碼

  1. 含有中文的 str 無法用 ASCII 編碼,因爲中文編碼的範圍超過了 ASCII 編碼的範圍,Python 會報錯
  2. ord() 函數獲取字符的整數表示,chr() 函數把編碼轉換爲對應的字符
  3. bytes 類型的數據用帶 b 前綴的單引號或雙引號表示,例: x = b’ABC’
  4. 在 bytes 中,無法顯示爲ASCII字符的字節,用 \x## 顯示。
  5. 以 Unicode 表示的 str 通過 encode() 方法可以編碼爲指定的 bytes;把 bytes 變爲str,用 decode() 方法
  6. 如果 bytes 中只有一小部分無效的字節,可以傳入 errors=‘ignore’ 忽略錯誤的字節:
 >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
     '中'
  1. len() 函數計算的是 str 的字符數,如果換成 bytes,len() 函數就計算字節數:
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

1箇中文字符經過 UTF-8 編碼後通常會佔用3個字節,而1個英文字符只佔用1個字節

list 與 tuple

  1. List 集合用 [ ] 表示,tuple 用( )表示
  2. 若用負數作爲索引,則以倒序開始獲取集合元素
  3. 刪除 list 末尾的元素,用 pop() 方法,刪除指定位置用 pop(i) 方法,其中 i 是索引位置
  4. 在 tuple 裏指定義一個元素時,必須加一個逗號來消除歧義
>>> t = (1,)
>>> t
(1,)

循環

  1. for … in 循環,依次把 list 或 tuple 中的每個元素迭代出來
names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name
  1. range() 函數生成一個整數序列, range(x) 生成從 0 開始小於 x 的整數,再可以用 list() 函數轉換爲 list

dict 與 set
dict:

  1. 使用鍵-值(key-value)存儲,具有極快的查找速度
  2. 一個 key 只能對應一個 value,所以,多次對一個 key 放入 value,後面的值會把前面的值沖掉
  3. 要避免 key 不存在的錯誤,有兩種辦法,一是通過 in 判斷 key 是否存在:
>>> 'Thomas' in d
False

二是通過 dict 提供的 get() 方法,如果 key 不存在,可以返回 None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
  1. 刪除一個key,用 pop(key) 方法,對應的 value 也會從 dict 中刪除
  2. 與 list 比較,dict 有以下幾個特點:
    查找和插入的速度極快,不會隨着 key 的增加而變慢;
    需要佔用大量的內存,內存浪費多。
    而 list 相反:
    查找和插入的時間隨着元素的增加而增加;
    佔用空間小,浪費內存很少。
  3. 在 Python 中,字符串、整數等都是不可變的,可以作爲 key。而 list 是可變的,所以不能作爲 key

set:

  1. set 也是一組 key 的集合,但不存儲 value。由於 key 不能重複,所以在 set 中,沒有重複的 key。
  2. 創建一個 set,需要提供一個 list 作爲輸入集合
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
  1. 重複元素在 set 中自動被過濾
  2. add(key) 方法可以添加元素,可以重複但是沒效果;remove(key) 方法可以刪除元素
  3. set 可以看成數學意義上的無序和無重複元素的集合,因此,兩個 set 可以做數學意義上的交集、並集等操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章