如何从生成器或列表中提取前N项?
8 个回答
67
[next(generator) for _ in range(n)]
这是最简单的方法,但如果生成器提前用完了,就会抛出一个叫StopIteration
的错误。
另一方面,下面这些方法可以返回最多 n
个项目,这在很多情况下更好:
列表:
[x for _, x in zip(range(n), records)]
生成器:
(x for _, x in zip(range(n), records))
153
import itertools
top5 = itertools.islice(array, 5)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
728
切片列表
top5 = array[:5]
- 要切片一个列表,语法很简单:
array[start:stop:step]
- 你可以省略任何一个参数。下面这些写法都是可以的:
array[start:]
、array[:stop]
、array[::step]
切片生成器
import itertools
top5 = itertools.islice(my_list, 5) # grab the first five elements
在Python中,你不能直接对生成器进行切片。你可以使用
itertools.islice()
,它会用新的切片生成器来包装一个对象,语法是itertools.islice(generator, start, stop, step)
记住,切片生成器会部分消耗它。如果你想保持整个生成器不变,可以先把它转换成元组或列表,比如:
result = tuple(generator)