How to unpack using star expression in Python?

Python's star expression (*) allows you to unpack sequences without knowing their exact length in advance. This solves the limitation of traditional unpacking where you must match the number of variables to sequence elements.

The Problem with Traditional Unpacking

When unpacking sequences, you must know the exact number of elements ?

random_numbers = [0, 1, 5, 9, 17, 12, 7, 10, 3, 2]
random_numbers_descending = sorted(random_numbers, reverse=True)
print(f"Sorted numbers: {random_numbers_descending}")

# This will cause an error - too many values to unpack
try:
    largest, second_largest = random_numbers_descending
except ValueError as e:
    print(f"Error: {e}")
Sorted numbers: [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]
Error: too many values to unpack (expected 2)

Traditional Solution Using Indexing

Before star expressions, you had to use indexing and slicing ?

random_numbers_descending = [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]

largest = random_numbers_descending[0]
second_largest = random_numbers_descending[1]
rest_of_numbers = random_numbers_descending[2:]

print(f"Largest: {largest}")
print(f"Second largest: {second_largest}")
print(f"Rest: {rest_of_numbers}")
Largest: 17
Second largest: 12
Rest: [10, 9, 7, 5, 3, 2, 1, 0]

Using Star Expression (*)

The star expression provides a cleaner solution by capturing remaining elements ?

random_numbers_descending = [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]

largest, second_largest, *rest_of_numbers = random_numbers_descending
print(f"Largest: {largest}")
print(f"Second largest: {second_largest}")
print(f"Rest: {rest_of_numbers}")
Largest: 17
Second largest: 12
Rest: [10, 9, 7, 5, 3, 2, 1, 0]

Star Expression at Different Positions

You can place the star expression anywhere in the unpacking pattern ?

random_numbers_descending = [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]

# Star at the beginning
*rest_of_numbers, second_smallest, smallest = random_numbers_descending
print(f"Rest: {rest_of_numbers}")
print(f"Second smallest: {second_smallest}")
print(f"Smallest: {smallest}")

# Star in the middle
first, *middle, last = random_numbers_descending
print(f"First: {first}, Middle: {middle}, Last: {last}")
Rest: [17, 12, 10, 9, 7, 5, 3, 2]
Second smallest: 1
Smallest: 0
First: 17, Middle: [12, 10, 9, 7, 5, 3, 2, 1], Last: 0

Star Expression Limitations

There are important restrictions when using star expressions ?

# Cannot use star expression alone
try:
    exec("*rest = [1, 2, 3]")
except SyntaxError as e:
    print("Error: Cannot use starred expression alone")

# Cannot use multiple stars at same level
try:
    exec("*first, *second, last = [1, 2, 3, 4]")
except SyntaxError as e:
    print("Error: Cannot use multiple starred expressions")
Error: Cannot use starred expression alone
Error: Cannot use multiple starred expressions

Handling Empty Results

When no elements remain for the starred variable, it becomes an empty list ?

short_list = [0, 1]
first, second, *rest = short_list
print(f"First: {first}, Second: {second}, Rest: {rest}")
print(f"Type of rest: {type(rest)}")
First: 0, Second: 1, Rest: []
Type of rest: <class 'list'>

Conclusion

Star expressions provide a clean, readable way to unpack sequences of unknown length. They eliminate the need for manual indexing and make code more maintainable when working with variable-length sequences.

Updated on: 2026-03-25T11:55:06+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements