Split a string in equal parts (grouper in Python)

Grouper recipe is an extended toolset made using an existing itertool as building blocks. It collects data into fixed-length chunks or blocks.

Existing Itertools Used:
izip_longest(*iterables[, fillvalue]) : Make an iterator that aggregates elements from each of the iterables. If the iterables are of uneven length, missing values are filled-in with fillvalue. Iteration continues until the longest iterable is exhausted.

Performance:



  • The extended tools offer the same high performance as the underlying toolset.
  • The superior memory performance is kept by processing elements one at a time rather than bringing the whole iterable into memory all at once.
  • Code volume is kept small by linking the tools together in a functional style which helps eliminate temporary variables.
  • High speed is retained by preferring “vectorized” building blocks over the use of for-loops and generators which incur interpreter overhead.

Examples:

Input : str = ABCDEFG, l = 3
Output : ABC DEF Gxx
Explaination: 
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

 
Below is the Python3 code :

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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 legth 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)    

chevron_right


Output:

ABC DEF Gxx


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : adisakshya