Python 3.6 學習--基礎7:循環技術,更多關於條件,比較序列和其他類型

來源:https://docs.python.org/3.6/tutorial/datastructures.html#the-del-statement

1.循環技術

循環遍歷字典時,可以使用該items()方法同時檢索密鑰和相應的值。

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

循環遍歷序列時,可以使用該enumerate()函數同時檢索位置索引和相應的值。

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

要同時循環兩個或更多個序列,條目可以與該zip()功能配對。

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

要反向循環序列,首先在正向指定序列,然後調用該reversed()函數。

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

 要按排序順序循環序列,請使用sorted()返回新排序列表的函數,同時保持源不變。

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

 當你循環它時,有時很有可能改變一個列表; 但是,創建新列表通常更簡單,更安全。

>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...         filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

2.更多關於條件

whileif語句中使用的條件可以包含任何運算符,而不僅僅是比較。

比較運算符in並檢查序列中是否出現(不發生)值。運算符並比較兩個對象是否真的是同一個對象; 這隻對像列表這樣的可變對象很重要。所有比較運算符具有相同的優先級,低於所有數值運算符的優先級。not inisis not

比較可以鏈接。例如,測試是否小於,而且等於。a < b == cabbc

比較可以使用布爾運算符進行組合andor,和一個比較的結果(或任何其它的布爾表達式的)可以與否定not。這些優先級低於比較運算符; 它們之間,not具有最高優先級和or最低優先級,因此相當於。與往常一樣,括號可用於表達所需的組成。A and not B or C(A and (not B)) or C

布爾運算符andor所謂的短路 運算符:它們的參數從左到右進行計算,一旦確定結果,評估就會停止。例如,如果AC爲true但B爲false,則不評估表達式 。當用作一般值而不是布爾值時,短路運算符的返回值是最後一個求值的參數。A and B and CC

可以將比較結果或其他布爾表達式分配給變量。例如,

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

 請注意,在Python中,與C不同,賦值不能出現在表達式中。C程序員可能會抱怨這一點,但它避免了C程序中遇到的常見問題:===預期時輸入表達式。

3.比較序列和其他類型

可以將序列對象與具有相同序列類型的其他對象進行比較。比較使用詞典排序:首先比較前兩個項目,如果它們不同,則確定比較的結果; 如果它們相等,則比較接下來的兩個項目,依此類推,直到任一序列用完爲止。如果要比較的兩個項本身是相同類型的序列,則遞歸地執行詞典比較。如果兩個序列的所有項目相等,則認爲序列相等。如果一個序列是另一個序列的初始子序列,則較短的序列是較小的(較小的)序列。字符串的字典順序使用Unicode代碼點編號來排序單個字符。相同類型序列之間比較的一些示例:

(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異常,而不是提供任意排序。

 

 

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