How to take the first N items from a generator or list? [duplicate]
Slicing a list
top5 = array[:5]
- To slice a list, there's a simple syntax:
- You can omit any parameter. These are all valid:
Slicing a generator
import itertoolstop5 = itertools.islice(my_list, 5) # grab the first five elements
You can't slice a generator directly in Python.
itertools.islice()will wrap an object in a new slicing generator using the syntax
itertools.islice(generator, start, stop, step)
Remember, slicing a generator will exhaust it partially. If you want to keep the entire generator intact, perhaps turn it into a tuple or list first, like:
result = tuple(generator)
In my taste, it's also very concise to combine
range(n) in Python3), which works nice on generators as well and seems to be more flexible for changes in general.
# Option #1: taking the first n elements as a list[x for _, x in zip(xrange(n), generator)]# Option #2, using 'next()' and taking care for 'StopIteration'[next(generator) for _ in xrange(n)]# Option #3: taking the first n elements as a new generator(x for _, x in zip(xrange(n), generator))# Option #4: yielding them by simply preparing a function# (but take care for 'StopIteration')def top_n(n, generator): for _ in xrange(n): yield next(generator)