Python入门之控制结构 - 循环结构——第4关:迭代器

Posted YLeee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门之控制结构 - 循环结构——第4关:迭代器相关的知识,希望对你有一定的参考价值。

任务描述

迭代器就是用来循环访问一系列元素。迭代器不仅可以迭代序列也可以迭代不是序列但是表现出序列行为的对象。
本关的任务是让读者理解与学会使用迭代器

相关知识

迭代器的优点

  • 迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势,因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式。
  • 迭代器仅仅在访问到某个元素时才使用该元素,在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合。
  • 迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。

理解迭代器

可直接作用于for循环的数据类型如:listtupledict等统称为可迭代对象:Iterable。可以使用方法isinstance()判断一个对象是否是可迭代对象。
例如:

from collections import Iterable
result = isinstance([],Iterable)
print(result)
result = isinstance((),Iterable)
print(result)
result = isinstance('python',Iterable)
print(result)
result = isinstance(213,Iterable)
print(result)

结果为:

  1. True
  2. True
  3. True
  4. False

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iteratornext()函数访问每一个对象,直到对象访问完毕返回一个StopIteration异常。可以使用isinstance()判断一个对象是否是Iterator对象。
例如:

from collections import Iterable
result = isinstance([],Iterable)
print(result)
result = isinstance((),Iterable)
print(result)
result = isinstance('python',Iterable)
print(result)
result = isinstance(213,Iterable)
print(result)

结果为:

  1. False
  2. False
  3. True

所有的Iterable都可以通过iter()函数转化为Iterator

定义迭代器

当自己定义迭代器时,需要定义一个类,类里面包含一个iter()函数,这个函数能够返回一个带next()方法的对象。
例如:

class MyIterable:
    def __iter__(self):
        return MyIterator()
class MyIterator:
    def __init__(self):
        self.num = 0
    def __next__(self):
        num += 1
        if self.num >= 10:
            raise StopIteration
        return self.num

复制迭代器

迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用赋值的方法,这样是不起作用的。

如果你想了解更多运算符相关知识,请参考[美]Wesley J. Chun 著《Python核心编程》第八章。

编程要求

本关的编程任务是补全Book.py文件中的判断语句部分,具体要求如下:

  • 当输入一个列表时,填入将列表List转换为迭代器的代码
  • 填入用next()函数遍历迭代器IterList的代码

测试说明

本文的测试文件是ListCalculate.py,具体测试过程如下:

  1. 平台自动编译生成ListCalculate.exe;
  2. 平台运行ListCalculate.exe,并以标准输入方式提供测试输入;
  3. 平台获取ListCalculate.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。

以下是平台对src/step4/ListCalculate.py的样例测试集:
预期输入:
5,6,7,8,9
预期输出:
10
12
14
16
18

预期输入:
12,54,89,10,0
预期输出:
24
108
178
20
0

开始你的任务吧,祝你成功!

*只要认为是对的就去做,坚持去做,不要在乎别人的看法,哪怕是错,至少你有去做过证明曾经你努力过。*

 

参考答案

List = []
member = input()
for i in member.split(','):
    result = i
    List.append(result)
#请在此添加代码,将List转换为迭代器的代码
#********** Begin *********#
it = iter(List)
#********** End **********#
while True:
    try:
	#请在此添加代码,用next()函数遍历IterList的代码
        #********** Begin *********#
        num = next(it)
        #********** End **********#
        result = int(num) * 2
        print(result)
    except StopIteration:
        break
    

 

以上是关于Python入门之控制结构 - 循环结构——第4关:迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Python入门之控制结构 - 循环结构——第1关:While循环与break语句

Python入门之控制结构 - 循环结构——第2关:for循环与continue语句

Python入门之函数结构——第3关:函数的使用范围:Python作用域

Python入门之函数结构——第1关:函数的参数 - 搭建函数房子的砖

Python入门之函数结构——第2关:函数的返回值 - 可有可无的return

头歌实验五Python循环结构