自学Python之Python基础:(六)可迭代对象与反迭代技巧

本文详细介绍了Python中的可迭代对象、迭代器和生成器,包括它们的概念、如何进行反向迭代以及如何对迭代器进行切片。此外,还探讨了使用yield关键字创建生成器以及如何同时迭代多个可迭代对象,特别是利用zip()函数进行并行迭代。
摘要由CSDN通过智能技术生成

转载的老板请注明出处:http://blog.csdn.net/cc_xz/article/details/78692064万分感谢!

在本篇中,你将了解到:
1.可迭代对象、迭代器与生成器。
2.如何进行反向迭代。
3.对迭代器进行切片。
4.同时迭代多个可迭代对象。


可迭代对象、迭代器与生成器:
容器:
容器是用来存储元素的一种数据结构,容器将所有的数据都保存在内存中,在Python中的典型容器有:list、deque、set、dict、OrderedDict等。容器很容易理解,它就是生活中的箱子、房间等一切可以盛放其他物品的容器。
通过判断对象是否包含某元素来确定它是否是一个容器:

assert 1 in [1, 2, 3, 4]  # assert是Python中的断言,断言是表达式的返回结果比如为True。
assert 4 not in [1, 2, 3]  # 如果表达式的返回结果为False,则报出AssertionError异常。
assert 1 in {
  1, 2, 3, 4, 5}  # 例如第五行中,由于元组中并不存在1,所以报出异常。
assert 4 not in {
  1, 2, 3, 5}  # 而这些代码表明,list、set、tuple都是容器。 
assert 1 in (12, 3, 4, 5)  # 因为他们都包含了多个不同的元素。
assert 4 not in (1, 2, 3, 5)

输出结果为:

Traceback (most recent call last):
  File "D:/Python/Code/Demo01/Demo.py", line 5, in <module>
    assert 1 in (12,3,4,5)
AssertionError

可迭代对象:
大部分的容器都是可迭代的,但还有一些对象也是可以迭代的,例如文件对象和管道对象等。一般而言容器所存储的元素是优先的,同样的,可迭代对象也可以用来表示一些包含有限元素的数据结构。任何对象都可以成为可迭代对象,不一定必须是基本数据结构,只要这个对象可以返回一个iterator即可。

x = [1,2,3,4,5]
y = iter(x) #iter()函数用于生成一个迭代器。

# print(next(x)) #默认list是可迭代对象,而不是迭代器对象。
print(next(y)) #而y则是使用iter()函数所生成的迭代器对象。
print(type(x))
print(type(y))

输出结果为:

1
<class 'list'>
<class 'list_iterator'>

值得注意的是,这里是x是可迭代对象,而y是迭代器,迭代器可以从可迭代对象中获取值。在可以进行迭代的类中,一般会实现__iter__()和__next__()两个函数。

x = [1,2,3,4,5]
for x_ in x :
   pass

当执行上述for循环中的代码时,实际上是在执行:
这里写图片描述
即:将一个可迭代对象调用iter()函数转换成一个迭代器,再调用这个迭代器的netx()函数,将其中的元素一一解析出来。


迭代器(Iterators):
任何具有__next__()函数的对象都是迭代器,对迭代器调用next()函数可以获取下一个元素。而至于该对象如何产生这个值,同它能否成为一个迭代器并没有关系(只有一个元素)。所以迭代器本质上是一个生产元素的工厂,每次向迭代器请求下一个值时,迭代器都会进行计算并返回相应的元素。
为了更好的理解迭代器的内部结构,首先来定义一个生成斐波拉契数的迭代器(菲波拉契数是值在一个数值的序列中,后面一个数的值等于前面两个数的和)

class fib<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值