Python – Itertools.chain()

25 Aug, 2021
The itertools is a module in Python having a collection of functions that are used for handling iterators. They make iterating through the iterables like lists and strings very easily. One such itertools function is chain().Note: For more information, refer to Python Itertools 
It is a function that takes a series of iterables and returns one iterable. It groups all the iterables together and produces a single iterable as output. Its output cannot be used directly and thus explicitly converted into iterables. This function come under the category iterators terminating iterators.Syntax :  
chain (*iterables)
The internal working of chain can be implemented as given below :  
def chain(*iterables):
     for it in iterables:
       for each in it:
           yield each
Example 1: The odd numbers and even numbers are in separate lists. Combine them to form a new single list.
Python3
from itertools import chain # a list of odd numbersodd = [1, 3, 5, 7, 9] # a list of even numberseven = [2, 4, 6, 8, 10] # chaining odd and even numbersnumbers = list(chain(odd, even)) print(numbers)
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
 
Example 2: Some of the consonants are in a list. The vowels are given in a list. Combine them and also sort them.
Python3
from itertools import chain # some consonantsconsonants = ['d', 'f', 'k', 'l', 'n', 'p'] # some vowelsvowels = ['a', 'e', 'i', 'o', 'u'] # resultatnt listres = list(chain(consonants, vowels)) # sorting the listres.sort() print(res)
['a', 'd', 'e', 'f', 'i', 'k', 'l', 'n', 'o', 'p', 'u']
 
Example 3: In the example below, Each String is considered to be an iterable and each character in it is considered to be an element in the iterator. Thus every character is yielded
Python3
from itertools import chain res = list(chain('ABC', 'DEF', 'GHI', 'JKL')) print(res)
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']
 
Example 4: 
Python3
from itertools import chain st1 = "Geeks"st2 = "for"st3 = "Geeks" res = list(chain(st1, st2, st3))print("before joining :", res) ans = ''.join(res)print("After joining :", ans)
chain.from_iterable() functionIt is similar to chain, but it can be used to chain items from a single iterable. The difference is demonstrated in the example given below:Example 5:
Python3
from itertools import chain li = ['ABC', 'DEF', 'GHI', 'JKL'] # using chain-single iterable.res1 = list(chain(li))  res2 = list(chain.from_iterable(li)) print("using chain :", res1, end ="\n\n") print("using chain.from_iterable :", res2)
Example 6: Now consider a list like the one given below : 
li=['123', '456', '789']
You are supposed to calculate the sum of the list taking every single digit into account. So the answer should be : 
1+2+3+5+6+7+8+9 = 45
This can be achieved easily using the code below :
Python3
from itertools import chain li = ['123', '456', '789'] res = list(chain.from_iterable(li)) print("res =", res, end ="\n\n") new_res = list(map(int, res)) print("new_res =", new_res) sum_of_li = sum(new_res) print("\nsum =", sum_of_li)
res = ['1', '2', '3', '4', '5', '6', '7', '8', '9']

new_res = [1, 2, 3, 4, 5, 6, 7, 8, 9]

sum = 45
 
To simplify it, we combine the steps. An optimized approach is given below:
Python3
from itertools import chain li = ['123', '456', '789'] res = list(map(int, list(chain.from_iterable(li)))) sum_of_li = sum(res) print("res =", res, end ="\n\n")print("sum =", sum_of_li)
res = [1, 2, 3, 4, 5, 6, 7, 8, 9]

sum = 45
 
diggy
kalrap615
Python-itertools
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python Dictionary
Different ways to create Pandas Dataframe
Enumerate() in Python
Read a file line by line in Python
Python String | replace()
How to Install PIP on Windows ?
*args and **kwargs in Python
Python Classes and Objects
Iterate over a list in Python
Python OOPs Concepts