Python split list into n sublists

In this tutorial, you will learn how to split a list into chunks in Python using different ways with examples.

Lists are mutable and heterogenous, meaning they can be changed and contain different data types. We can access the elements of the list using their index position.

There are five various ways to split a list into chunks.

  1. Using a For-Loop
  2. Using the List Comprehension Method
  3. Using the itertools Method
  4. Using the NumPy Method
  5. Using the lambda Function

Method 1: Using a For-Loop

The naive way to split a list is using the for loop with help of range() function. 

The range function would read range(0, 10, 2), meaning we would loop over the items 0,2,4,6,8.

We then index our list from i:i+chunk_size, meaning the first loop would be 0:2, then 2:4, and so on.

# Split a Python List into Chunks using For Loops sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] chunked_list = list() chunk_size = 2 for i in range(0, len(sample_list), chunk_size): chunked_list.append(sample_list[i:i+chunk_size]) print(chunked_list)

Output

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

Method 2: Using the List Comprehension Method

The list comprehension is an effective way to split a list into chunks when compared to for loop, and it’s more readable.

We have a sample_list and contain ten elements in it. We will split the list into equal parts with a chunk_size of 2.

# Split a Python List into Chunks using list comprehensions sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] chunk_size=2 result=[sample_list[i:i + chunk_size] for i in range(0, len(sample_list), chunk_size)] print(result)

Output

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

sample_list[i:i + chunk_size] give us each chunk. For example, if i=0, the items included in the chunk are i to i+chunk_size, which is from 0:2 index. In the next iteration, the items included would be 2:4 index and so on.

We can leverage the itertools module to split a list into chunks. The zip_longest() function returns a generator that must be iterated using for loop. It’s a straightforward implementation and returns a list of tuples, as shown below.

# Split a Python List into Chunks using itertools from itertools import zip_longest sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] chunk_size=2 result=list(zip_longest(*[iter(sample_list)]*chunk_size, fillvalue='')) print(result) chunked_list = [list(item) for item in list(zip_longest(*[iter(sample_list)]*chunk_size, fillvalue=''))] print(chunked_list)

Output

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

Method 4: Using the NumPy Method

We can use the NumPy library to divide the list into n-sized chunks. The array_split() function splits the list into sublists of specific size defined as n.

# Split a Python List into Chunks using numpy import numpy as np # define array and chunk_szie sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] our_array = np.array(sample_list) chunk_size = 2 # split the array into chunks chunked_arrays = np.array_split(our_array, len(sample_list) / chunk_size) print(chunked_arrays) # Covert chunked array into list chunked_list = [list(array) for array in chunked_arrays] print(chunked_list)

Output

[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8]), array([ 9, 10])] [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

Method 5: Using the lambda Method

We can use the lambda function to divide the list into chunks. The lambda function will iterate over the elements in the list and divide them into N-Sized chunks, as shown below.

# Split a Python List into Chunks using lambda function sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] chunk_size = 2 lst= lambda sample_list, chunk_size: [sample_list[i:i+chunk_size] for i in range(0, len(sample_list), chunk_size)] result=lst(sample_list, chunk_size) print(result)

Output

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

Python split list into n sublists

Python Lists are powerful data structures that help you store diverse data types and work with them. Sometimes you may need to split python list into N sublists. In this article, we will learn how to split python list into sublists using python’s numpy library which offers many features & functions to work with python data types.

We will use python numpy to split lists. If your python does not have numpy yet, open terminal and run the following command to install it via pip.

$ pip install numpy

If you don’t have pip either, here are the steps to install it on your Linux system.

Please note, numpy will split list such that all sublists will have equal number of items, as far as possible. If that is not possible, then some of the sublists will have one or more elements than the others.

When we use numpy to split lists, the output will be an array of N lists. Here is an example to split an array into 2 parts using split function.

>>> import numpy as np >>> mylist = np.array([1,2,3,4,5,6]) >>> np.split(mylist, 2) [array([1, 2, 3]), array([4, 5, 6])]

You can save the output to a variable in order to use it further.

>>> output=np.split(mylist, 2) >>> output[0] array([1, 2, 3])

You can also split the list using array_split function.

>>> np.array_split(mylist, 2) [array([1, 2, 3]), array([4, 5, 6])]

In the above example, you can see that the 2 lists have been equally divided. But what if it is not possible to split list items equally among sublists?

In such cases, if you use split() function, you will get an error, and if you use array_split() function, then some lists will have more items than the others. Let us try to split the above list into 4 parts using split() function first, and then using array_split()

>>> np.split(mylist,4) Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> np.split(mylist,4) File "C:\Python27\lib\site-packages\numpy\lib\shape_base.py", line 849, in split 'array split does not result in an equal division') ValueError: array split does not result in an equal division >>> np.array_split(mylist,4) [array([1, 2]), array([3, 4]), array([5]), array([6])]

As you can see, array_split() function splits the list into unequal lists but does not give an error.

So if you don’t want to get an error message but want to split list into sublists, even if they are unequal in size, then use array_split. On the other hand, if you don’t want python to split a list into sublists with unequal items but want to throw an error, then use split() functions.

Of course, there are many ways to split a list into sublists, and we have shown a very easy to ways to do this.

Also read:

How to Insert Text at Certain Line in Linux
Django Get Unique Values from Queryset
How to Create RPM for Python Module
What is NotReverseMatch Error & How to Fix It
How to Create RPM for Script