more-itertools
有这个吗
grouper
可能对该任务有用的函数。我
replicate it
在这里:
from itertools import zip_longest
def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
"Collect data into non-overlapping fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, fillvalue='x') --> ABC DEF Gxx
# grouper('ABCDEFG', 3, incomplete='strict') --> ABC DEF ValueError
# grouper('ABCDEFG', 3, incomplete='ignore') --> ABC DEF
args = [iter(iterable)] * n
if incomplete == 'fill':
return zip_longest(*args, fillvalue=fillvalue)
if incomplete == 'strict':
return zip(*args, strict=True)
if incomplete == 'ignore':
return zip(*args)
else:
raise ValueError('Expected fill, strict, or ignore')
此功能与
zip
(
documentation
)以如下所示的方式返回元组的迭代器,其中元组的第一个元素是来自
b
元组的第二个元素是一个由三个元素组成的元组,这些元素取自
a
.对于本例,返回的迭代器
拉链
链接
1.9
关于
A.
,
1.7
接下来的三个要素
A.
等等
a = [902920,28393892,93993992,93938939929,929393993928,38982933939393, 883383938393]
b = [1.9, 1.7, 1.6]
c = zip(b, grouper(a, 3))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))
(1.6, (883383938393, None, None))
这个
石斑鱼
函数提供了额外的功能。默认情况下,如果长文档中没有足够的元素
A.
列表要填充一个3元组,空元素将被
None
.所以你可以设定
fillvalue
您是否希望获得除以下内容以外的值
没有一个
或者,您甚至可以声明,您不希望像本例中那样使用不完整的元组
c = zip(b, grouper(a, 3, incomplete = 'ignore'))
for item in c:
print(item)
输出
(1.9, (902920, 28393892, 93993992))
(1.7, (93938939929, 929393993928, 38982933939393))