>>> n = 3
>>> x = range(n ** 2),
>>> xn = list(zip(*[iter(x)] * n))
在PEP 618中,作者给出了一个如何使用zip
将数据分成相等大小的组的例子.
它怎麽工作?
我认为它依赖于zip
的实现细节,这样,如果它获取列表[iter(x)] * n
的每个元素的第一个元素,则等于前n
个元素,因为在获取每个元素时,iter(x)
的状态发生了变化.
这是因为下面的代码复制了上述行为:
n = 3
x = range(n ** 2)
xn = [iter(x)] * n
res = []
while True:
try:
col = []
for element in xn:
col.append(next(element))
res.append(col)
except:
break
但是,我想确保情况确实如此,并且这是一种可靠的行为,可以用来分块可迭代的元素.