You can use itertools.islice to get a rugged iterator from a list:
Example:
>>> from itertools import islice >>> lis = range(20) >>> for x in islice(lis, 10, None, 1): ... print x ... 10 11 12 13 14 15 16 17 18 19
Update:
As noted by @ user2357112, the performance of islice depends on the starting point of the slice and the size of the iterable, a normal slice will be fast in almost all cases and should be preferred. Here are some more time comparisons:
For islice lists, islice slightly faster or equal to the normal slice, when the starting point of the slice is less than half the size of the list; for large indexes, the normal slice is a clear winner.
>>> def func(lis, n): it = iter(lis) for x in islice(it, n, None, 1):pass ... >>> def func1(lis, n): #it = iter(lis) for x in islice(lis, n, None, 1):pass ... >>> def func2(lis, n): for x in lis[n:]:pass ... >>> lis = range(10**6) >>> n = 100 >>> %timeit func(lis, n) 10 loops, best of 3: 62.1 ms per loop >>> %timeit func1(lis, n) 1 loops, best of 3: 60.8 ms per loop >>> %timeit func2(lis, n) 1 loops, best of 3: 82.8 ms per loop >>> n = 1000 >>> %timeit func(lis, n) 10 loops, best of 3: 64.4 ms per loop >>> %timeit func1(lis, n) 1 loops, best of 3: 60.3 ms per loop >>> %timeit func2(lis, n) 1 loops, best of 3: 85.8 ms per loop >>> n = 10**4 >>> %timeit func(lis, n) 10 loops, best of 3: 61.4 ms per loop >>> %timeit func1(lis, n) 10 loops, best of 3: 61 ms per loop >>> %timeit func2(lis, n) 1 loops, best of 3: 80.8 ms per loop >>> n = (10**6)/2 >>> %timeit func(lis, n) 10 loops, best of 3: 39.2 ms per loop >>> %timeit func1(lis, n) 10 loops, best of 3: 39.6 ms per loop >>> %timeit func2(lis, n) 10 loops, best of 3: 41.5 ms per loop >>> n = (10**6)-1000 >>> %timeit func(lis, n) 100 loops, best of 3: 18.9 ms per loop >>> %timeit func1(lis, n) 100 loops, best of 3: 18.8 ms per loop >>> %timeit func2(lis, n) 10000 loops, best of 3: 50.9 us per loop #clear winner for large index >>> %timeit func1(lis, n)
For Small Lists, a normal slice is faster than islice for almost all cases.
>>> lis = range(1000) >>> n = 100 >>> %timeit func(lis, n) 10000 loops, best of 3: 60.7 us per loop >>> %timeit func1(lis, n) 10000 loops, best of 3: 59.6 us per loop >>> %timeit func2(lis, n) 10000 loops, best of 3: 59.9 us per loop >>> n = 500 >>> %timeit func(lis, n) 10000 loops, best of 3: 38.4 us per loop >>> %timeit func1(lis, n) 10000 loops, best of 3: 33.9 us per loop >>> %timeit func2(lis, n) 10000 loops, best of 3: 26.6 us per loop >>> n = 900 >>> %timeit func(lis, n) 10000 loops, best of 3: 20.1 us per loop >>> %timeit func1(lis, n) 10000 loops, best of 3: 17.2 us per loop >>> %timeit func2(lis, n) 10000 loops, best of 3: 11.3 us per loop
Output:
Go for normal slices.