利用單行For迴圈產生List資料組
圖1 單行For迴圈的功能示意圖
如果要產生一個1到10的整數數列,並且存入List資料組,依照我們前面學過的語法,可以這樣做:
num_list = [] for i in range(1, 11): # range()的第三個參數沒有設定,表示用預設值1 num_list += [i] # 也可以寫成num_list.extend([i])
但是有一個更簡單的寫法:
num_list = [i for i in range(1, 11)]
我們在方括弧中,用內建函式range()產生一個數列。這個數列的每一個值會先複製給自訂變數i,然後再把自訂變數i的內容存入List資料組。這個語法的完整格式如下(參考圖1):
資料組 = [自訂變數 for 自訂變數 in 資料組 if 關係運算式]
也就是說,可以在For迴圈後面加上If判斷式,只有當If判斷式的結果是True的時候,那一個自訂變數的值才會存入List資料組。舉例來說,如果要把前面的例子改成產生偶數的數列,只要加入If判斷式如下:
num_list = [i for i in range(1, 11) if i % 2 == 0]
這個語法也可以用來從資料組複製資料到另一個資料組,例如:
# scores是儲存考試成績的List資料組 scores_copy = [item for item in scores] # 複製全部成績 fail = [item for item in scores if item < 60] # 只複製不及格的成績
這個語法還可以進一步擴充,成為多個自訂變數的情況,如以下範例:
sum = [i + j for i in range(1, 4) for j in range(10, 14)]
這種情況就像多層迴圈。第一個變數i的迴圈在第一層,第二個變數j的迴圈在第二層,依此類推。也就是說,後面的變數改變一輪之後,前面的變數才會進入下一項。所以上述程式的功能就等於以下程式碼:
sum = [] for i in range(1, 4): for j in range(10, 14): sum += [i + j]
執行以上程式碼之後,sum的內容為:
[11, 12, 13, 14, 12, 13, 14, 15, 13, 14, 15, 16]
我們也可以加入If判斷式,篩選出想要的值,例如:
sum = [i + j for i in range(1, 4) if i % 2 == 1 for j in range(10, 14) if j % 2 == 0]
執行之後,sum的內容如下:
[11, 13, 13, 15]
關係運算子也可以用來比較資料組。問題是資料組中有很多筆資料,要如何比較?我們把資料組的比較方式整理說明如下:
x1 = 1, 'a', (1, 1) # tuple資料組 x2 = 2, 'b', (2, 2) # tuple資料組 y1 = [1, 'a', (1, 1)] # list資料組 y2 = [2, 'b', 2] # list資料組
其中x1和x2是Tuple資料組,y1和y2是List資料組。x1和x2的相同位置的資料型態都一樣,所以x1可以和x2比較。但是y1和y2的相同位置的資料型態卻不一樣(也就是第三筆資料的型態不一樣,一個是Tuple資料組,另一個是數值),所以y1和y2不能夠比較。
-------------------------------------
|
沒有留言:
張貼留言