Open In App

Python | Convert a nested list into a flat list

In this article, we will cover how to Flatten a List of Lists in python. To convert a nested list into a flat list we are going to see some examples.

Example:



Input : l = [1, 2, [3, 4, [5, 6] ], 7, 8, [9, [10] ] ]
Output : l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Input : l = [[['item1', 'item2']], [['item3', 'item4']]] 
Output : l = ['item1', 'item2', 'itm3, 'item4'']

What are nested lists?

A list within a list (or a list within another nested list). The task is to convert a nested list into a single list in python i.e no matter how many levels of nesting is there in the python list, all the nested have to be removed in order to convert it to a single containing all the values of all the lists inside the outermost brackets but without any brackets inside. 

In this article, we will cover 5 different approaches to flat a list of lists.



Example 1: Convert a nested list into a flat list using Nested for Loops

In this example, we will see that we are Iterating the outer list first and then if there is a sub-list then we are iterating the sub-list using for loop. After that, we are appending the element in our new list “flatList” which gives us a flat list of 1 dimensional.




def flat(lis):
    flatList = []
    # Iterate with outer list
    for element in lis:
        if type(element) is list:
            # Check if type is list than iterate through the sublist
            for item in element:
                flatList.append(item)
        else:
            flatList.append(element)
    return flatList
 
 
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
print('List', lis)
print('Flat List', flat(lis))

Output:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Time Complexity: O(n)
Auxiliary Space: O(n)

Example 2: Using a List Comprehension

In this example, we will use list comprehension to  Iterate the list first, and then we are iterating the sub-list using for loop. After that, we are appending the element in our new list “flatList” using a List Comprehension which gives us a flat list of 1 dimensional.




# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
# iterate through the sublist using List comprehension
flatList = [element for innerList in lis for element in innerList]
 
# printing original list
print('List', lis)
# printing flat list
print('Flat List', flatList)

Output:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Example 3: Using recursion

In this example, We are using the recursion method to flat a nested list with multiple levels of nesting.




# input list
l = [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]
 
# output list
output = []
 
# function used for removing nested
# lists in python using recursion
def reemovNestings(l):
    for i in l:
        if type(i) == list:
            reemovNestings(i)
        else:
            output.append(i)
 
 
# Driver code
print('The original list: ', l)
reemovNestings(l)
print('The list after removing nesting: ', output)

Output:
The original list:  [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]
The list after removing nesting:  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Example 4: Using the Pandas module

In this example, we are using a pandas module, pandas have a method called np.concatenate which helps us to flat a nested list. 




import numpy as np
 
lst = [[11, 33], [22, 55], [11], [77, 88]]
 
new = list(np.concatenate(lst))
 
print(new)

Output:

[11, 33, 22, 55, 11, 77, 88]

Example 5: Using the Python In-build sum() method

In this example, we are using a python In-build sum() method which will give us a flat list.




lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99]]
 
flatList = sum(lis, [])
 
print('New list', flatList)

Output:

New list [11, 22, 33, 44, 55, 66, 77, 88, 99]

Example 6: Using the Python functools module

The functools module offers ways to use and extend other functions and callable objects without having to totally rewrite them.




import functools
import operator
 
# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
flatList = functools.reduce(operator.iconcat, lis, [])
 
# printing original list
print('List', lis)
# printing flat list
print('Flat List', flatList)

Output:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Example 7: Using the Python itertools module

Python’s Itertool is a module that provides various functions that work on iterators to produce complex iterators.




import itertools
 
# Original list
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
 
flatList = list(itertools.chain(*lis))
 
print("Original List:", lis)
print("Flattened List:", flatList)

Output:

List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Example 8 : Using extend() method




lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
res=[]
for i in lis:
    res.extend(i)
print('List', lis)
print('Flat List', res)

Output
List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]

Article Tags :