Python入門100個實例(33)——用列表推導式來縮短輸入代碼

從本例學到什麼

  1. 列表推導式是什麼?怎麼寫?怎麼執行的?
  2. 如何用列表推導式讀入一組數?

實例程序

題目描述

漲工資
輸入一組工資數據,寫入列表。對於小於5000的工資,漲1.5倍。並輸出漲後的工資數據。

輸入格式:
數據之間空格隔開

輸出格式:
漲工資後的數據,空格隔開。尾部 不帶空格。

輸入樣例:
3000 4000 6000 8000 2000.5

輸出樣例:
4500.0 6000.0 6000 8000 3000.75

上述題目的參考答案

nums = input().split()  #input()讀入一行,split()切分成數字字符串,nums的值是數字串列表。
fnums = [float(n) for n in nums]  #把nums列表內的各個元素轉換成浮點數,存入fnums列表
results = []  #存儲結果
for i in range(len(fnums)):
    if fnums[i] < 5000:
        results.append(str(fnums[i] * 1.5))  #str函數把浮點數轉換爲字符串
    else:
        results.append(nums[i])  #若爲整數,nums[i]字符串中不包含小數點
print(' '.join(results))  
#join是字符串操作方法,作用是把results內的各個字符串組合成一個完整的字符串
#各個字符串之間用空格間隔。

知識點講解

  1. 列表推導式的寫法: [表達式 for 變量 in 列表] 。這裏,for和in是固定的寫法。
  2. 列表推導式的結果是一個新列表。我們舉例說明列表推導式的執行過程。
    對於[i ** 2 for i in range(5)],執行過程是:
    (1)變量 i 取值0, 計算0 ** 2,然後把結果0加入到結果列表尾部。
    (2)變量 i取值1,計算1 ** 2,然後把結果1加入到結果列表尾部。
    (3)變量 i 取值2, 計算2 ** 2, 然後把結果4加入到結果列表尾部。
    (4)變量 i 取值3, 計算3 ** 2, 然後把結果9加入到結果列表尾部。
    (5)變量 i 取值4, 計算4 ** 2, 然後把結果16加入到結果列表尾部。
    (6)[i ** 2 for i in range(5)]的結果是:[0, 1, 4, 9, 16]。
  3. 對於上面的實例程序,假設輸入內容是:3000 4000 6000 8000 2000.5,執行語句 nums = input().split()後,nums的值是[‘3000’, ‘4000’, ‘6000’, ‘8000’, ‘2000.5’],接下來執行語句:
fnums = [float(n) for n in nums] 

執行過程是:
(1)變量 n取列表nums的第1個元素,值爲’3000’,執行float函數轉換爲3000.0,加入結果列表尾部。
(2)變量 n取列表nums的第2個元素,值爲’4000’,執行float函數轉換爲4000.0,加入結果列表尾部。
(3)變量 n取列表nums的第3個元素,值爲‘6000’,執行float函數轉換爲6000.0,加入結果列表尾部。
(4)變量 n取列表nums的第4個元素,值爲’8000’,執行float函數轉換爲8000.0,加入結果列表尾部。
(5)變量 n取列表nums的第5個元素,值爲’2000.5’,執行float函數轉換爲2000.5,加入結果列表尾部。
(6)結果列表賦值給fnums。這樣,fnums成爲結果列表的名字。

  1. 上一節給出的代碼中,頭兩行可以寫成一行,即:
fnums = [float(s) for s in input().split()]

這裏,把變量s替換爲變量n,或者變量ds,或者其他變量名字都是可以的。float(s)是表達式,作用是得到數字字符串s對應的浮點數。
語句的執行步驟是:
(1)執行input(),讀入一行。
(2)執行split(),得到數字串列表。
(3)依次遍歷數字串列表中的元素s,執行float(s),得到的結果加入到結果列表尾部。

小結

  1. 列表推導式的寫法: [表達式 for 變量 in 列表] 。
  2. 列表推導式的結果是一個新列表,我們稱之爲結果列表。執行過程是:變量依次取<列表>內的元素,執行表達式,得到的結果加入結果列表尾部。
  3. 一行輸入中讀入一組小數存入列表的寫法如:
fnums = [float(s) for s in input().split()]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章