【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 循环总是可以依次取出集合的每一个元素。
注意 : 集合是指包含一组元素的数据结构,我们已经介绍的包括以下几个 :
- 有序集合:list,tuple,string 和 Unicode
- 无序集合:set
- 无序集合并且具有 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( 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 ( 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 的迭代 内容在这就结束了,感谢支持!
来源:CSDN
作者:派森小白没有情
链接:https://blog.csdn.net/qq_44054938/article/details/104108832