Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取列表的前N项,如果列表较短,则确定_Python - Fatal编程技术网

Python 获取列表的前N项,如果列表较短,则确定

Python 获取列表的前N项,如果列表较短,则确定,python,Python,打印列表/生成器的前N项 这适用于普通列表。它打印列表的前3项 l=[1, 2, 3, 4] print(l[:min(3, len(l))]) 我希望这项工作的清单少于三个项目,太。如果列表中只有一项,则打印一项 AFAIK len(l)仅适用于列表。如何为生成器实现此功能?您只需使用l[:3],无需其他任何操作: In [11]: l = [1, 2, 3 ,4] In [12]: print(l[:3]) [1, 2, 3] 这对发电机的作用完全相同: In [19]: def fi

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

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

l=[1, 2, 3, 4]
print(l[:min(3, len(l))])
我希望这项工作的清单少于三个项目,太。如果列表中只有一项,则打印一项


AFAIK len(l)仅适用于列表。如何为生成器实现此功能?

您只需使用
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]

您只需使用
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]
对于您可以使用的列表

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)
对于您可以使用的列表

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)

如果我正确理解了这个问题,您希望生成器生成min(N,len(生成器))

切片
直接应用于生成器。不需要实例化列表。 这将产生最小(N,长度(发电机))长度的发电机

e、 g


如果我正确理解了这个问题,您希望生成器生成min(N,len(生成器))

切片
直接应用于生成器。不需要实例化列表。 这将产生最小(N,长度(发电机))长度的发电机

e、 g


问题是针对generator,而不是针对List。@Ajeet,刚刚添加了Generators的示例Generators可能无限长。把它们排完再切片也是非常低效的,不需要重新发明轮子。只需使用
itertools
中的
islice
。例如,
max(islice(iter(range(m)),n))
适用于
m
n
的所有可能的正整数值对@Dunes,我不确定我是否理解你的意思。是关于发电机的代码吗?如果是-这只是生成器部分的一个示例。问题是生成器,而不是列表。@Ajeet,刚刚添加了生成器示例生成器可能无限长。把它们排完再切片也是非常低效的,不需要重新发明轮子。只需使用
itertools
中的
islice
。例如,
max(islice(iter(range(m)),n))
适用于
m
n
的所有可能的正整数值对@Dunes,我不确定我是否理解你的意思。是关于发电机的代码吗?如果是这样-这只是生成器部分的一个示例。这可能有助于解决生成器问题:“我也希望此项工作适用于少于三项的列表”-…确实如此?这可能有助于解决生成器问题:“我也希望此项工作适用于少于三项的列表”-…是吗?范围对象是一种特殊情况,对任意生成器无效。范围对象是一种特殊情况,对任意生成器无效。