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(序列)。作用是,为元素附加序号。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值