itertools.count(start, step) returns an infinite stream of evenly spaced values. You can optionally supply the starting number, which defaults to 0, and the interval between numbers, which defaults to 1: itertools.cycle(iter) saves a copy of the contents of a provided iterable and returns a new iterator that returns its elements from first to last. The new iterator will repeat these elements infinitely. itertools.repeat(elem, [n]) returns the provided element n times, or returns the element endlessly if n is not provided. itertools.chain(iterA, iterB, ...) takes an arbitrary number of iterables as input, and returns all the elements of the first iterator, then all the elements of the second, and so on, until all of the iterables have been exhausted. itertools.islice(iter, [start], stop, [step]) returns a stream that’s a slice of the iterator. With a single stop argument, it will return the first stop elements. If you supply a starting index, you’ll get stop-start elements, and if you supply a value for step , elements will be skipped accordingly. Unlike Python’s string and list slicing, you can’t use negative values for start , stop , or step . itertools.tee(iter, [n]) replicates an iterator; it returns n independent iterators that will all return the contents of the source iterator. If you don’t supply a value for n , the default is 2. Replicating iterators requires saving some of the contents of the source iterator, so this can consume significant memory if the iterator is large and one of the new iterators is consumed more than the others. 12 6.1 Creating new iterators itertools.count()=> 0,1,2,3,4,5,6,7,8,9,... itertools.count( 10 )=> 10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,... itertools.count( 10 ,5)=> 10 ,15 ,20 ,25 ,30 ,35 ,40 ,45 ,50 ,55 ,... itertools.cycle([ 1,2,3,4,5])=> 1,2,3,4,5,1,2,3,4,5,... itertools.repeat('abc')=> abc, abc, abc, abc, abc, abc, abc, abc, abc, abc, ... itertools.repeat('abc',5)=> abc, abc, abc, abc, abc itertools.chain(['a','b','c'], ( 1,2,3))=> a, b, c, 1,2,3 itertools.islice(range(10 ),8)=> 0,1,2,3,4,5,6,7 itertools.islice(range(10 ),2,8)=> 2,3,4,5,6,7 itertools.islice(range(10 ),2,8,2)=> 2,4,6 itertools.tee( itertools.count() ) => iterA, iterB where iterA -> 0,1,2,3,4,5,6,7,8,9,... and iterB -> 0,1,2,3,4,5,6,7,8,9,...