itertools islice方法和start参数

时间:2016-05-11 16:02:06

标签: python

itertools.islice的文档说:

  

创建一个从迭代中返回所选元素的迭代器。如果start为非零,则跳过iterable中的元素,直到达到start。之后,连续返回元素,除非将step设置为高于导致跳过项目的步骤。

用法说:

islice('ABCDEFG', 2) --> A B
islice('ABCDEFG', 2, 4) --> C D

不应该是第一个版本返回CDEFG ...跳过前两个元素是AB

1 个答案:

答案 0 :(得分:3)

你误读了。它有two call profiles

itertools.islice(iterable, stop)
itertools.islice(iterable, start, stop[, step])

如果只传递两个参数,则第二个参数是stop参数,就好像您将0作为start参数传递一样。为了获得您期望的行为,您需要:

islice('ABCDEFG', 2, None)

但要明白,对于大start个值,这是低效的;在引擎盖下,islice正在迭代并丢弃,直到它到达所需的start位置,你没有绕过迭代的工作(只是在CPython的C层做了一点优化它)