将字符串分成相等的部分( Python中的 grouper)
Grouper recipe
是一个扩展工具集,使用现有的itertool
作为构建块。它将数据收集到固定长度的块或块中。
使用的现有Itertools:
izip_longest(*iterables[, fillvalue])
:创建一个迭代器,聚合来自每个可迭代对象的元素。如果可迭代的长度不均匀,则用 fillvalue 填充缺失值。迭代一直持续到最长的可迭代对象用完为止。
表现:
- 扩展工具提供与底层工具集相同的高性能。
- 卓越的内存性能是通过一次处理一个元素来保持的,而不是一次将整个可迭代对象全部放入内存。
- 通过以有助于消除临时变量的功能样式将工具链接在一起,可以保持较小的代码量。
- 通过更喜欢“矢量化”构建块而不是使用导致解释器开销的 for 循环和生成器来保持高速。
例子:
Input : str = ABCDEFG, l = 3
Output : ABC DEF Gxx
Explanation:
Grouping characters of string in set of 3: ABC DEF Gxx.
'x' is added to the set which doesn't have 3 elements in it.
Input : str = GEEKSFORGEEKS, l = 5
Output : GEEKS FORGE EKSxx
下面是 Python3 代码:
# Python3 code for the grouper recipe
# import the existing itertool izip_longest
from itertools import izip_longest
# function for the grouper recipe
def grouper(iterable, n, fillvalue ='x'):
# create 'n'-blocks for collection
args = [iter(iterable)] * n
# collect data into fixed length blocks of
# length 'n' using izip_longest and store
# result as a list
ans = list(izip_longest(fillvalue = fillvalue, *args))
# (optional) loop to convert ans to string
t = len(ans)
for i in range(t):
ans[i] = "".join(ans[i])
# return ans as string
return " ".join(ans)
# Driver code
s = "ABCDEFG"
k = 3
result = grouper(s, k)
print(result)
输出:
ABC DEF Gxx