📌  相关文章
📜  将字符串分成相等的部分( Python中的 grouper)

📅  最后修改于: 2022-05-13 01:55:38.440000             🧑  作者: Mango

将字符串分成相等的部分( 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