Python 获取列表的前N项,如果列表较短,则确定
打印列表/生成器的前N项 这适用于普通列表。它打印列表的前3项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
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,我不确定我是否理解你的意思。是关于发电机的代码吗?如果是这样-这只是生成器部分的一个示例。这可能有助于解决生成器问题:“我也希望此项工作适用于少于三项的列表”-…确实如此?这可能有助于解决生成器问题:“我也希望此项工作适用于少于三项的列表”-…是吗?范围对象是一种特殊情况,对任意生成器无效。范围对象是一种特殊情况,对任意生成器无效。