获取前N个列表项,如果列表较短则可以

时间:2016-12-22 13:34:34

标签: python

打印列表/生成器的前N项

这适用于普通列表。它打印列表的前3项

l=[1, 2, 3, 4]
print(l[:min(3, len(l))])

我希望这项工作适用于少于三个项目的列表。如果列表中只有一个项目,则打印一个项目。

AFAIK len(l)仅适用于列表。如何为发电机实现这个?

3 个答案:

答案 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)
>>>