Python provides efficient data manipulation and processing solutions, making it popular among developers worldwide. In this blog post, learn how to easily split a Python list into N chunks of even size.

We will explain the necessary steps and provide a sample code for getting this result quickly and effectively, so you can use it in your projects confidently. Read on to find out more about Python list splits!

To split a list into N chunks of even size, you can use the grouper function from the itertools module:

				
					from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = list(grouper(my_list, n))
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements. You can use the fillvalue parameter to specify a value to pad the shorter chunks with. For example, if you set fillvalue=0, the last chunk will be padded with zeros: [[1, 2, 3], [4, 5, 6], [7, 8, 9, 0]].

You can also use the chunks function from the more_itertools module to split the list into chunks of equal size:

				
					from more_itertools import chunks

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = list(chunks(my_list, n))
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements.

1. Iterator Approach

Python’s Iterator approach is a powerful method for working with data. It helps traverse efficiently through each sequence element while keeping track of its current position.

This makes it easy to access any particular item within the sequence without having to start over from the beginning. The iterator also allows users to perform various operations on the data, such as applying certain functions to each element or filtering out certain elements.

By using python’s iterator approach, developers can easily create efficient and powerful algorithms that can process large amounts of data quickly and accurately.

Here’s an example of how you can split a list into N chunks of even size using an iterator approach:

				
					def chunker(seq, size):
    # Create an iterator from the input sequence
    it = iter(seq)
    # Iterate in chunks of the specified size
    while True:
        # Get the next chunk of elements from the iterator
        chunk = tuple(itertools.islice(it, size))
        # If the chunk is not empty, yield it, otherwise exit the loop
        if chunk:
            yield chunk
        else:
            break

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = list(chunker(my_list, n))
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements.

2. For Loop Approach

Python’s for loop is one of the most widely used and powerful iteration tools. It allows users to quickly iterate over each item in a list, dictionary, tuple, or set.

Using a for loop, users can efficiently work through and manipulate data structures without explicitly writing out every single step. This makes it an ideal tool for working with large data sets or performing multiple operations quickly. In addition, the syntax for a python for loop is relatively simple, making it easy to start.

A python for loop will take the form of “for an item in sequence:” followed by an indented block of code that will be executed on each iteration.

Here’s an example of how you can split a list into N chunks of even size using a for loop:

				
					def chunker(seq, size):
    # Initialize an empty list to store the chunks
    chunks = []
    # Iterate over the input sequence in chunks of the specified size
    for i in range(0, len(seq), size):
        # Append the chunk to the list
        chunks.append(seq[i:i+size])
    # Return the list of chunks
    return chunks

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = chunker(my_list, n)
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements.

3. List Comprehensions Can Do the Same

Python list comprehensions are a powerful tool for manipulating lists in python.

They allow you to apply operations on each element in the list and create a new, modified one. It efficiently performs transformations on lists without needing to write separate loops or multiple lines of code.

List comprehensions are written using the syntax ‘[expression for an item in list if condition]’. The expression is applied to each item in the list, and if it meets the given condition, the corresponding element from the new list is created.

Here’s an example:

				
					def chunker(seq, size):
    # Use a list comprehension to split the input sequence into chunks of the specified size
    return [seq[i:i+size] for i in range(0, len(seq), size)]

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = chunker(my_list, n)
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements.

3. While Loop

A while loop is a control flow statement that allows code to be executed repeatedly based on a given condition. The while loop will keep running until the specified condition evaluates to false. This can be useful in many applications, such as iterating through lists or waiting for user input.

When using while loops, it’s important to remember that an infinite loop is possible if the condition never evaluates to false. To avoid this, it’s important to ensure the while loop has a valid stopping point.

To use while loops in Python, you must specify a while keyword followed by your desired condition. The code block inside of the while loop should be indented and will be executed while the state is true. An example while loop looks like this:

				
					def chunker(seq, size):
    # Initialize an empty list to store the chunks
    chunks = []
    # Set the start index to 0
    i = 0
    # Set the end index to the chunk size
    j = size
    # Loop until the end index is greater than the length of the input sequence
    while j <= len(seq):
        # Append the chunk to the list
        chunks.append(seq[i:j])
        # Increment the start and end indices by the chunk size
        i += size
        j += size
    # If there are elements left in the input sequence, append the remaining elements to the list
    if i < len(seq):
        chunks.append(seq[i:])
    # Return the list of chunks
    return chunks

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = chunker(my_list, n)
print(chunks)

				
			

This will output: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Note that if the length of the list is not divisible by n, the last chunk will have fewer elements.

4. Use NumPy to Split into N Chunks

NumPy is a powerful Python library that allows users to split an array into N chunks easily. Splitting a large array into smaller chunks can be particularly useful when working with large datasets and data processing tasks.

Using NumPy, users can take advantage of the numpy.array_split() function to quickly break down an existing array into N numPy arrays. This function takes two required parameters: the current array and the number of chunks to split it into. An optional third parameter allows users to specify the axis of the array they wish to split.

You can use the array_split function from the NumPy module to split a list into N chunks of even size. Here’s an example:

				
					import numpy as np

def chunker(seq, size):
    # Convert the input sequence to a NumPy array
    arr = np.array(seq)
    # Split the array into chunks of the specified size
    chunks = np.array_split(arr, size)
    # Return the list of chunks
    return chunks

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = chunker(my_list, n)
print(chunks)

				
			

This will output: [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]

Note that the output is a list of NumPy arrays, not Python lists. If you want to get a list of Python lists, you can use the tolist() method:

				
					chunks = [chunk.tolist() for chunk in chunks]
print(chunks)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

				
			

Alternatively, you can use the split function from the NumPy module, which returns a list of Python lists:

				
					import numpy as np

def chunker(seq, size):
    # Convert the input sequence to a NumPy array
    arr = np.array(seq)
    # Split the array into chunks of the specified size
    chunks = np.split(arr, size)
    # Return the list of chunks
    return chunks

# Example: split a list into 3 chunks of even size
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3
chunks = chunker(my_list, n)
print(chunks)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

				
			

Wrap up

There are several ways to split a list into N chunks of even size in Python, including using the grouper function from the itertools module, the chunks function from the more_itertools module, an iterator approach, a for loop, or list comprehensions. You can also use the array_split or split functions from the NumPy module to split a list into N chunks of even size.

Which approach you choose will depend on your wants and preferences. Some approaches may be more efficient or easier to use in certain situations. It’s a good idea to try out a few different methods and see which one works best for your particular use case.


Thanks for reading. Happy coding!