打印列表/生成器的前N项
这适用于普通列表。它打印列表的前3项
l=[1, 2, 3, 4]
print(l[:min(3, len(l))])
我希望这项工作适用于少于三个项目的列表。如果列表中只有一个项目,则打印一个项目。
AFAIK len(l)仅适用于列表。如何为发电机实现这个?
答案 0 :(得分:3)
您可以使用l[:3]
,不需要任何其他内容:
In [11]: l = [1, 2, 3 ,4]
In [12]: print(l[:3])
[1, 2, 3]
对于生成器,这将完全相同:
In [19]: def firstn(n):
...: num = 0
...: while num < n:
...: yield num
...: num += 1
...:
In [20]: list(firstn(5))[:3]
Out[20]: [0, 1, 2]
它也适用于少于n
元素的容器:
n = 20
lyst = [1, 2]
print(lyst[:20]) # prints [1, 2]
答案 1 :(得分:2)
对于列表,您可以使用
l = [1, 2, 3, 4, 5]
print(l[:3])
对于较短的列表,这也不会失败。如果你想使用生成器,我认为最好的方法是将生成器转换为列表并执行相同的
a = (i for i in range(0, 4)) # example of generator
print(list(a)[:3])
对于较短的发电机也不会失败
如果要在切片后获取生成器,请使用itertools
import itertools
print(itertools.islice(generated_list, 3)
答案 2 :(得分:-1)
如果我正确理解了这个问题,你需要一个生成器来生成min(N,len(generator))。
直接将slice
应用于生成器。无需实例化列表。
这将产生min(N,len(发电机))加长的发电机。
e.g。
>>> l = range(5)
>>> l[:10]
range(0, 5)
>>>