【python】Iterator(14)

参考:

Note:



1 iterable 和 iterator

可迭代对象:可以简单的理解为可以用 for 循环遍历的

或者配合 isinstance 来判断,如下所示

from collections import Iterable

print(isinstance("Kobe Bryant", Iterable))  # string
print(isinstance({}, Iterable))  # dict
print(isinstance((), Iterable))  # tuple
print(isinstance([], Iterable))  # list
print(isinstance(set(), Iterable))  # set
print(isinstance(123, Iterable))  # int
print(isinstance(123.0, Iterable))  # float
print(isinstance(True, Iterable))  # bool

True
True
True
True
True
False
False
False

注意可迭代对象不一定是迭代器!

list1 = [11, 22, 33]
next(list1)  

会报错

TypeError: 'list' object is not an iterator

迭代器才可以 next,可迭代对象升级为迭代器用 iter

list1 = [11, 22, 33]
list1 = iter(list1)
print(next(list1))
print(next(list1))
print(next(list1))
print(next(list1))

会依次输出 list1 中的元素,直到榨干为止(StopIteration

11
22
33
Traceback (most recent call last):
  File "/home/Experiments/1.py", line 8, in <module>
    print(next(list1))
StopIteration

迭代器

只能往后next(),不能回退
迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁
这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个 G 的文件

再举一个例子

set1 = {1, 2, 3}
print(set1[0])

报错了

TypeError: 'set' object does not support indexing 

集合不支持索引,我们可以借助迭代器依次访问

iterator = iter(set1)
print(type(iterator))
print(iterator)

print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
<class 'set_iterator'>
<set_iterator object at 0x7f7612d578b8>
1
2
3
Traceback (most recent call last):
  File "/home/yanmeng/Experiments/Scene_Cls/1.py", line 14, in <module>
    print(next(iterator))
StopIteration

在这里插入图片描述

迭代工具

from itertools import combinations
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for game in combinations(teams, 2):
    print(game)

output

('Packers', '49ers')
('Packers', 'Ravens')
('Packers', 'Patriots')
('49ers', 'Ravens')
('49ers', 'Patriots')
('Ravens', 'Patriots')

附录

any

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。

等价于

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

例如

print(any(['a', 'b', 'c', 'd']))
print(any(('a', 'b', '', 'd')))
print(any([0, '', False]))

output

True
True
False

Note:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值