【Python】Python之迭代

【Python】Python之迭代

学习完 Python 重要的基础数据类型(list,tuple…)之后,我们来了解一下 迭代 部分的相关知识。

迭代的含义

在 Python 中,如果给定一个 list 或者 tuple ,我们可以通过 for 循环来遍历这个list或tuple,这种遍历我们称之为迭代(Iteration)。

在 Python 中,迭代是通过 for … in 来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,例如 C语言 代码:

for (i=0; i<list.length; i++) {
    n = list[i];
}

可以看出,Python 的 for 循环抽象程度要高于 C 的 for 循环。

因为 Python 的 for 循环不仅可以用在 list 和 tuple 上,还可以作用在其他任何可迭代对象上。

因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

注意 : 集合是指包含一组元素的数据结构,我们已经介绍的包括以下几个 :

  1. 有序集合:list,tuple,string 和 Unicode
  2. 无序集合:set
  3. 无序集合并且具有 key-value 对:dict

迭代 是一个动词,它指的是一种操作 !在Python中,就是 for 循环。

迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。

索引迭代

在 Python 中,迭代永远是取出元素本身,而非元素的索引。
而对于有序集合,元素确实是有索引的。如果我们想在 for 循环中拿到索引,应该如何做呢?

方法是使用 enumerate() 函数,具体代码见下 :

L = ['小明','小红','小黑','小白']
for index, name in enumerate(L):
    print ( index, '-', name )

测试结果 :
在这里插入图片描述
使用 enumerate() 函数,我们可以在 for 循环中同时绑定索引 index 和元素 name 。但是,这不是 enumerate() 的特殊语法。实际上是 enumerate() 函数 把:

L = ['小明','小红','小黑','小白']

转变成了 :

L = [(0, '小明'), (1, '小红'), (2, '小黑'), (3, '小白']

因此,迭代的每一个元素实际上是一个tuple :

L = ['小明','小红','小黑','小白']  # L = [(0, '小明'), (1, '小红'), (2, '小黑'), (3, '小白']
for t in enumerate(L):
    index = t[0]
    name = t[1]
    print ( index, '-', name )

如果我们知道每个 tuple 元素都包含两个元素,for 循环又可以进一步简写为 :

L = ['小明','小红','小黑','小白']  # L = [(0, '小明'), (1, '小红'), (2, '小黑'), (3, '小白']
for index, name in enumerate(L):
    print ( index, '-', name )

这样不但代码更简单,而且还少了两条赋值语句。

可见 索引迭代 也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的 tuple 类型再迭代,就同时获得了索引和元素本身。

迭代 dict 的 value

我们已经了解到 dict 对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到 dict 的一个key。
下面我们来看看如何迭代 dict 对象的 value 。

其实 dict 对象有一个 values() 方法,这个方法把 dict 转换成一个包含所有 value 的 list ,这样我们迭代的就是 dict 的每一个 value:

d = { '小明':60,'小红':100,'小黑':90,'小白':70 }
print( list( d.values() ) )
for a in d.values():
    print ( a )

测试结果:
在这里插入图片描述
在学习的过程中,我了解到 Python 3 中删除了 itervalues() 方法,dict 的迭代只保留了 values() 方法,所以有兴趣的朋友可以了解 Python 2 版本的 itervalues()方法 以及 两方法之间的异同用以帮助学习,在此我不赘述了。

我们看一个例题:
给定一个dict:d = { ‘小明’:77,‘小红’:99,‘小黑’:85,‘小白’:73 }
请计算所有同学的平均分。
提示: 由于分数存储在 dict 的 value 中,因此需要迭代 values() 。

参考代码如下:

d = { '小明':77,'小红':99,'小黑':85,'小白':73 }
sum = 0.0
for a in d.values():
    sum = sum + a
print ( 'average', ':', sum / len(d) )

测试结果如下:
在这里插入图片描述

迭代 dict 的 key 和 value

我们了解了如何迭代 dict 的 key 和 value ,那么接下来我们来看看,如何在一个 for 循环中同时迭代 dict 中的 key 和value 。

使用 items() 方法 把 dict 对象转换成一个包含 tuple 的 list 。我们对这个list进行迭代,可以同时获得 key 和 value :

d = { '小明':60,'小红':100,'小黑':90,'小白':70 }
print ( list( d.items() ) )
for key, value in d.items():
     print ( key, ':', value )

测试结果如下:
在这里插入图片描述
我们来看一个例题:
请根据 d = { ‘小明’:59,‘小红’:88,‘小黑’:93,‘小白’:76 }
打印出他们的名字和对应的成绩(name : score),最后再打印出他们的平均分 (average : score)。

提示: 在本题中,我们需要同时对 name 和 score 进行迭代。

参考代码如下:

d = { '小明':59,'小红':88,'小黑':93,'小白':76 }
sum = 0.0
for a, b in d.items():
    sum = sum + b
    print ( a, ':', b )
print ( 'average', ':', sum / len(d) )

测试结果如下:
在这里插入图片描述
Python 的迭代 内容在这就结束了,感谢支持!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值