Python入門100個實例(41)——enumerate函數的用法

從本實例學到什麼

  1. 輸入整數矩陣的做法。
  2. enumerate函數的用法。這是本文重點。

實例程序

題目描述

二維數組求左下三角元素之和
求一個n*n(n<10)數組左下三角(包括主對角線)元素的和。

輸入格式:
先輸入n(n<10)值,然後再輸入各個數組元素值。

輸入樣例:
2
1 2
3 4

輸出格式:
輸出左下三角(包括主對角線)全部元素的和。

輸出樣例:
8

輸入樣例2:
3
1 2 7
3 4 10
4 9 20

輸出樣例2
41

上述題目的參考答案

n = int(input())
#讀入整數矩陣
nmtx = []
for i in range(n):
    row = [int(s) for s in input().split()]  #讀入一行,把空格分隔的各個數字串轉換爲整數,構成一行
    nmtx.append(row)  #nmtx矩陣增加一行整數
#累加左下三角的元素
total = 0
for index, row in enumerate(nmtx):
    total += sum(row[:index+1])
print(total)

知識點講解

  1. 上一節給出的代碼中,第3-6行的功能是讀入整數矩陣。扼要解釋如下:
    (1-1)nmtx用來存儲整數矩陣。初值爲空列表(矩陣是列表爲元素的列表)。見第3行代碼。
    (1-2)第4行代碼表明,循環將執行n次。每一次循環,nmtx將增加一行整數。
    (1-3)第5行代碼的執行過程是:先執行input()讀入一行字符串,接着執行split()把字符串內的數字按空格分割成多個數字串,然後對每一個數字串s,執行int(s)轉換爲整數。該整數才成爲列表row的一個元素。
    (1-4)第6行是把一行整數追加到矩陣nmtx中。

  2. 第9行中,調用enumerate函數。調用enumerate函數的寫法是:enumerate(序列)。作用是爲序列中的元素加上序號。生成的結果也是一個序列。

  3. 舉一個例子說明enumerate函數的用法。enumerate(['a', 'b', 'c'])的值是:[(0, 'a'), '(1, 'b'), (2, 'c')](0, 'a')有兩項,第一項是序號,第二項是原列表的元素。

  4. 再舉一個例子說明enumerate函數的用法。enumerate([1.5, 2.8, 3.14, 5.6])的值是:[(0, 1.5), (1, 2.8), (3, 3.14), (4, 5.6)](0, 1.5)有兩項,第一項是序號,第二項是原列表的元素。(4, 5.6)也一樣,第一項是序號,第二項是原列表的元素。

  5. 以上一節的題目描述中給出的輸入樣例2爲例,我們來看看上一節給出的代碼中第9,10行代碼的執行過程。

(1)前提是,nmtx的值是:

					 [ [1, 2 ,7], 
  				  	   [3, 4, 10],
  				  	   [4, 9, 20] ]

(2)enumerate(nmtx)的值是:

           [ (0,  [1, 2 ,7]), 
             (1, [3, 4, 10]),
             (2, [4, 9, 20]) ]

(3)第9行代碼爲for index, row in enumerate(nmtx)。第一輪執行時,index取值爲0,row取值爲[1, 2, 7]。
(4)第二輪執行時,index取值爲1,row取值爲[3, 4, 10]。
(5)第三輪執行時,index取值爲2,row取值爲[4, 9, 20]。
(6)對於nmtx中的第index行(index=0, 1, 2),該行中列號爲0, 1, …, index的元素都是左下三角的元素,這些正是第10行代碼中切片row[ :index+1]取到的元素。sum(row[:index+1])計算這一行中位於左下三角的元素之和。

  1. enumerate函數的參數不限於列表,也可以是元組,集合(set),乃至字典,統稱爲序列。

小結

  1. 本文示範了讀入整數矩陣的做法。這一做法使用了列表推導式。
  2. 本文重點講解了enumerate函數的用法。寫法是: enumerate(序列)。作用是,爲元素附加序號。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章