用yield关键词实现列表的分组

我们可以使用yield函数来方便的将一个列表分割成n分,写成divide_iter(lst, n)的接口形式。我们这里注意到yield会把返回值依次存储到生成器generator中,并且把while循环走完。
要注意的是,这里我们还需要重新掌握以下知识点:
1.列表的切片操作 lst[i*div:(i-1)*div]
2.cel函数获得小数的进位
3.len获得list的长度

from math import ceil
def divide_iter(lst, n):
	if n<=0:
		yield lst
		return
	i,div = 0, ceil(len(lst) / n)
	while i<n:
		yield lst[i*div :(i+1)*div]
		i += 1
		print(i)
gen = divide_iter([1,2,3,4,5],0)
print(gen)
print(list(gen))
gen = divide_iter([1,2,3,4,5],2)
print(list(gen))

输出结果如下:

<generator object divide_iter at 0x000000000239F1A8>
[[1, 2, 3, 4, 5]]
1
2
[[1, 2, 3], [4, 5]]
[Finished in 1.2s]

如果我们使用for循环来打印生成器中的数据,则会得到以下的结果:

for g in gen:
	print(g)
[1, 2, 3]
1
[4, 5]
2
[Finished in 0.9s]

所以大胆猜想:for循环其实就是对in后面的生成其逐步执行next操作,不知道对不对。

发布了207 篇原创文章 · 获赞 16 · 访问量 9891

猜你喜欢

转载自blog.csdn.net/weixin_41855010/article/details/104636205