itertools.islice的文档说:
创建一个从迭代中返回所选元素的迭代器。如果start为非零,则跳过iterable中的元素,直到达到start。之后,连续返回元素,除非将step设置为高于导致跳过项目的步骤。
用法说:
islice('ABCDEFG', 2) --> A B
islice('ABCDEFG', 2, 4) --> C D
不应该是第一个版本返回CDEFG ...跳过前两个元素是AB
答案 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层做了一点优化它)