python3迭代器iter()函数和itertools模块

本文详细介绍了Python中的迭代器概念,包括如何使用iter()函数创建迭代器,以及迭代器在循环中的应用。同时,深入探讨了Python内置的itertools模块,提供了各种高效迭代操作的函数,如accumulate(), chain(), compress()等,并附有具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           所谓迭代器,就是提供next(),而不是通过下标的索引来计数。当在一个循环机制中需要下一项时,调用迭代器的next 方法即可获得它。条目全部取出后,会引发一个StopIteration异常,这并不表示错误的发生,而是告诉外部调用者迭代完成。

            python中内置的iter()函数可以创造一个迭代器,举例如下:

>>> list=[23,'fg',44]
>>> i=iter(list)
>>> i.next()
23
>>> i.next()
'fg'
>>> i.next()
44

            上面是python的2.7版本下的运行情况,貌似python3.7中做了点修改:

>>> list=[123,'x','mm','gg']
>>> i = iter(list)
>>> i.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list_iterator' object has no attribute 'next'

但iter()的next方法是迭代器中不可少的:

>>> next(i)
'x'
>>> next(i)
'mm'
>>> next(i)
'gg'
>>> next(i)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

在循环中就能有所体现:

it = iter([1, 2, 3, 4, 5])
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break


1
2
3
4
5

 python专门有一个迭代器模块:itertools,itertools是python内置的模块,使用简单且功能强大,汇总整理下:

Iterator

Arguments

Results

Example

accumulate()

p [,func]

p0, p0+p1, p0+p1+p2, ...

accumulate([1,2,3,4,5]) --> 1 3 6 10 15

chain()

p, q, ...

p0, p1, ... plast, q0, q1, ...

chain('ABC', 'DEF') --> A B C D E F

chain.from_iterable()

iterable

p0, p1, ... plast, q0, q1, ...

chain.from_iterable(['ABC', 'DEF']) --> A B C DE F

compress()

data, selectors

(d[0] if s[0]), (d[1] if s[1]), ...

compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F

dropwhile()

pred, seq

seq[n], seq[n+1], starting when pred fails

dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1

filterfalse()

pred, seq

elements of seq where pred(elem) is false

filterfalse(lambda x: x%2, range(10)) --> 0 2 46 8

groupby()

iterable[, keyfunc]

sub-iterators grouped by value of keyfunc(v)

 

islice()

seq, [start,] stop [, step]

elements from seq[start:stop:step]

islice('ABCDEFG', 2, None) --> C D E F G

starmap()

func, seq

func(*seq[0]), func(*seq[1]), ...

starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 91000

takewhile()

pred, seq

seq[0], seq[1], until pred fails

takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4

tee()

it, n

it1, it2, ... itn splits one iterator into n

 

zip_longest()

p, q, ...

(p[0], q[0]), (p[1], q[1]), ...

zip_longest('ABCD', 'xy', fillvalue='-') --> AxBy C- D-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值