本文為 Python Software Foundation -->Python 3.12.6 說明文件 -->Python教學文件 --> 5. 資料結構 --> 5.6. 迴圈技巧 --> 5.7. 深入了解條件 (Condition) --> 5.8. 序列和其他資料類型之比較 繁體中文版導讀文章
這個章節將會更深入的介紹一些你已經學過的東西的細節上,並且加入一些你還沒有接觸過的部分。
當對 dictionary 作迴圈時,鍵以及其對應的值可以藉由使用 items() method 來同時取得:
當對序列作迴圈時,位置索引及其對應的值可以藉由使用 enumerate() 函式來同時取得:
要同時對兩個以上的序列作迴圈,可以將其以成對的方式放入 zip() 函式:
要對序列作反向的迴圈,首先先寫出正向的序列,再對其使用 reversed() 函式:
要以迴圈對序列作排序,使用 sorted() 函式會得到一個新的經排序過的 list ,但不會改變原本的序列:
對序列使用 set() 可去除重複元素。對序列使用 sorted() 加上 set(),則是對經過排序後的非重複元素跑迴圈的慣用方法:
有時我們會想要以迴圈來改變的一個 list,但是,通常建立一個新的 list 會更簡單且安全:
使用在 while
和 if
陳述式的條件句可以包含任何運算子,而不是只有比較運算子 (comparisons) 。
比較運算子 in
和 not in
用於隸屬資格檢測,在容器中檢查一個值是否存在(或不存在)。運算子 is
和 is not
比較兩個物件是否真的是相同的物件。所有比較運算子的優先度都相同且都低於數值運算子。
比較運算是可以串連在一起的。例如, a < b == c
就是在測試 a 是否小於 b 和 b 是否等於 c。
比較運算可以結合布林運算子 and
和 or
,且一個比較運算的結果(或任何其他布林運算式)可以加上 not
來否定。這些運算子的優先度都比比較運算子還低,其中,not
的優先度最高,or
的優先度最低,因此 A and not B or C
等同於 (A and (not B)) or C
。一如往常,括號可以用來表示任何想要的組合。
布林運算子 and
和 or
也被稱為短路 (short-circuit) 運算子:會將其引數從左至右進行運算,當結果出現時即結束運算。例如,若 A
和 C
為真但 B
為假,則 A and B and C
的運算並不會執行到 C
。當運算結果被當成一般值而非布林值時,短路運算子的回傳值為最後被求值的引數。
將一個比較運算或其他布林運算式的結果指派給一個變數是可以的。例如:
注意,Python 與 C 語言不一樣,在運算式裡進行指派必須外顯地使用海象運算子 :=
。 這樣做避免了在 C 語言裡常見的一種問題:想要打 ==
卻在運算式裡輸入 =
。
序列物件通常可以拿來和其他相同類型的物件做比較。這種比較使用詞典式 (lexicographical) 順序:首先比較各自最前面的那項,若不相同,便可決定結果;若相同,則比較下一項,以此類推,直到其中一個序列完全用完。如果被拿出來比較的兩項本身又是相同的序列類型,則詞典式比較會遞迴地執行。如果兩個序列所有的項目都相等,則此兩個序列被認為是相等的。如果其中一個序列是另一個的子序列,則較短的那個序列為較小的序列。字串的詞典式順序使用 Unicode 的碼位 (code point) 編號來排序個別字元。以下是一些相同序列類型的比較:
(1, 2, 3) < (1, 2, 4)
[1, 2, 3] < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4) < (1, 2, 4)
(1, 2) < (1, 2, -1)
(1, 2, 3) == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
注意,若使用 < 或 > 來比較不同類型的物件是合法的,表示物件擁有適當的比較方法。例如,混合的數值類型是根據它們數值來做比較,所以 0 等於 0.0,等等。否則直譯器會選擇丟出一個 TypeError 錯誤而不是提供一個任意的排序。