[2.3.1] 進制(specialized)
二進制整數:以 0b 或 0B 開頭
八進制整數:以 0O 或 0o 開頭
[2.3.3] 複數 with cmath imported
複數的虛部用j或J來表示
1 | import cmath |
[2.4] 字符串
[2.4.2] 字符串拼接
1 | #Simply put them together in one line |
[2.4.3] 字符串和數值轉換
α. str()和repr()的區別:
str()用於將值轉化為適於人閱讀的形式
repr()轉化為供解釋器讀取的形式(如果沒有等價的語法,則會發生SyntaxError 異常),適合開發和調試階段使用。
1 | import datetime |
其二者相當於調用了對象的方法
1 | today = datetime.date.today() |
>:Experiment >
1 | print("12345".__repr__()) |
β. 字符串轉化為數值:
1 | string.atoi(s,[base]) #將字符串變為數值,base為進制基數 |
[2.4.5] 長字符串&原始字符串
使用三個單/雙引號包含的字符串(塊)形成一個長字符串(當不賦值給變量時可以作為註釋使用)。其依舊遵守字符串的拼接規則
1 | s = """this is a \ |
值得注意的是,當需要在表達式中間換行的時候,使用“\”字符來轉義以實現。也因為“\”的轉義功能,當需要實現“\”字符的時候,寫作“\\”。 但是,也可以使用原字符串來避免這樣的轉義。
1 | s = r"this 'is' a \'string\" |
但是,使用原始字符串的時候,不能以“\”結尾,避免最後的引號被轉義而出現SyntaxError: EOL while scanning string literal的錯誤,同時,原始字符串中的引號需要被轉義,但是轉義反斜槓將成為字符串的一部分。
[2.4.7] 字節串(bytes)
1 | #α using a single "b"lead the string to get bytes(only for the ASCII characters) |
[2.α] 字符串和字節串的神奇操作
α. 可以使用 變量[頭下標:尾下標] 的形式來截取字符串或字節串
1 | str = "this is a sample string" |
β. 連續輸出字符串中的某部分
1 | str = "this is a sample string" |
其中的索引還可以指定步長
1 | print(str[2:5:2]) #this will be "i" |
>:Specially > Python 字符串不能被改變。向一個索引位置賦值,比如str[0] = ‘m’會導致錯誤
γ. 判斷子串包含關係
1 | print("asd" in "asdfg") #this will be True |
θ. 刪除空白(字符串不改變)
lstrip : 從左開始刪除參數中所給的每一個匹配字符直到第一個無法匹配的字符
rstrip : 從右開始刪除參數中所給的每一個匹配字符直到第一個無法匹配的字符
strip:lstrip + rstrip
1 | #escaping the ' ' in two ends when given no arguments |
σ. 查找與替換(字符串不改變)
使用 translate() 來定義字符翻譯映射表以實現一次替換所有
1 | strg = 'aaggbbggyyggacd' |
使用 find() 來尋找子串在字符串中第一次出現的位置
1 | strg = 'aaggbbggyyggacd' |
對於字符串是否以指定子串開頭或結尾,使用 startswith()和 endswith() 來判斷
1 | strg = 'aaggbbggyyggacd' |
[2.5.2] 字符串的輸出
使用print搭配轉換說明符輸出時
%r 是使用 repr() 將變量或表達式轉換為字符串
%s 是使用 str() 將變量或表達式轉換為字符串
1 | strg = "asd" |
[2.6.2] 算術運算符(specialized)
α. 使用 // 來達到整除的效果
1 | c = 32 |
β. 使用 ** 來實現乘方運算
1 | c = 2 |
γ. is
is 只有在兩個變量引用同一個對象時會返回 True,而 == 則是隻要值相同即為True
1 | a = 3.14 |
[3.2] 元組和列表
pre.α. 元組和列表的兩個區別
列表的元素可以被重新賦值,但元組相當於常量,不能賦值
列表的兩端使用方括號而元組的兩端使用圓括號
[3.2.3] 加法
1 | tupleA = (1,'lemon',2) |
>:Specially > 將列表與元組直接相加會導致 TypeError: can only concatenate list (not “tuple”) to list 的錯誤
[3.2.4] 乘法
使用乘法可以將一個元素重複 n 次
1 | print(tupleA + tupleB * 3) |
[3.2.5] in
用 in 來判斷元素是否包括在元組或列表中
1 | 'lemon' in listA #this will be true |
[3.2.6]長度、最大值與最小值
1 | print(len(tupleA)) #this will be 3 |
>:Specially > 直接比較類型不同的元素會引發 TypeError: ‘>’ not supported between instances of ‘str’ and ‘int’ 的錯誤
[3.2.7]序列的封包和解包
1 | tupleA = 12,13,14,15,16 #this will automatically convert to a tuple |
[3.α] 列表的神奇操作
α. 元組轉換為列表(不可變到可變)
使用 list 函數來將元組區間等轉換成列表,但區間的步長起作用稍微有點神奇
1 | tuple_A = ('Luomos',1,2,3) |
β. 向列表追加
調用列表的 append 方法可以向列表最後追加元素,但是無論追加什麼,一次追加都只會形成一個嵌套元素
1 | listA = ['Lumos'] |
如果想要一次追加多個元素而不被嵌套,使用 extend
1 | listA = ['Lumos'] |
但是同時也可以發現,單個追加元素時元素會被拆開
γ. 刪除列表元素
ㄚ. 刪除列表中的元素切片(indexed)
使用 del 在刪除列表中的元素時可以依照索引刪除一個元素切片,其遵循所有一般切片的表示方式
1 | listA = ['Here', 'I', 'am', 'Here', 'I', 'am', 'Here', 'I', 'am'] |
>:Specially > 當沒有切片屬性而將列表名傳遞給 del 會使得整個列表變量被刪除,再次調用該變量將引發 NameError: name is not defined 的錯誤
當需要清空一個列表時,最好使用 clear 方法
1 | listA = ['Here', 'I', 'am', 'Here', 'I', 'am', 'Here', 'I', 'am'] |
ㄛ. 刪除指定元素的第一處
使用 remove 方法可以刪除指定元素的除此出現,而其後續其餘元素順次前移一個位置
1 | listA = ['Here', 'I', 'am', 'Here', 'I', 'am', 'Here', 'I', 'am'] |
>:Specially > 當指定的元素不存在時,將引發 ValueError: list.remove(x): x not in list 的錯誤
θ. 修改列表元素
列表的修改可以直接賦值,仍然遵循元素切片的一般表達方式,但是有兩個特殊點
ㄚ. 指定步長時元素個數必須可預測
1 | listB = list(range(1,10)) |
>:Specially > 元素個數不可預測時,將引發 ValueError: attempt to assign sequence of size * to extended slice of size * 的錯誤
ㄛ. 使用字符串直接賦值時字符串會被拆解
1 | listB = list(range(1,10)) |
字符串被拆解後,將從切片起點填充直到字符串結束,而切片終點無效
δ. count/index/reverse/sort
1 | listB = list(range(1,10)) |
[3.4] 字典
[3.4.2] 創建字典
字典的創建有多種等價寫法
1 | dictA = {'A':1,'B':2} |
除此之外,創建一個空字典也有多種寫法
1 | dictB = dict() |
元組作為一種不可變類型的,也是可以用作key的
1 | dictC = {(1,2):1,2:2,3:3} |
一次創建多key但value一定的字典
1 | dictD = fromkeys({'A','B'}) #dictD will be {'A':None,'B':None} |
[3.4.3] 字典的基本操作
α. 刪除字典元素
使用 del 可以刪除指定元素
1 | dictA = {'A':1,'B':2} |
使用 clear 可以清空一個字典
1 | dictA = {'A':1,'B':2} |
β. 獲取字典元素
使用 get 方法以避免訪問不存在的key時拋出異常,以None取代之
1 | dictA = {'A':1,'B':2} |
γ. 更新字典
使用 update 方法使用一個字典更新另一個字典(更新併合並)
1 | dictA = {'A':1,'B':2} |
使用 setdefault 方法來合併(不更新)
1 | dictA = {'A':1,'B':2} |
θ. 元素存在性判斷
使用 in/not in 來對key進行查詢,根據返回的結果進行判斷
1 | dictA = {'A':1,'B':2} |
δ. 字典格式化輸出
1 | dictA = {'A':1,'B':2} |
[4.2.α] !Attentions
以下值等同於False
1 | None 0 () "" [] {} |
空語句使用pass實現
當斷言為False時會引發錯誤
for-in 循環中的變量不應該在循環內更改值(foreach?)