A Python tuple is a data structure in Python that allows you to store a collection of elements. Python Tuples are similar to lists, but they are immutable, meaning once created, their elements cannot be changed. Tuples are defined using parentheses ().

Python Tuples

Table of Contents

Characteristics of Tuple Items

Tuples are a data structure in Python that have some specific characteristics that make them useful for various purposes. The main characteristics of Tuple items are ordered, unchangeable, and accept duplicate items. Here we explore these characteristics with examples:

Ordered

Tuples are ordered, which means the elements within a tuple have a specific order, and that order remains consistent throughout the tuple’s existence.

Example:


# Example of an ordered tuple
my_tuple = (3, 1, 4, 1, 5)
print(my_tuple) 

Output:


(3, 1, 4, 1, 5)

In the example above, the elements within the tuple my_tuple have a defined order, and it is maintained as (3, 1, 4, 1, 5).

Unchangeable (Immutable)

Tuples are immutable, which means once you create a tuple, you cannot modify, add, or remove its elements. Once defined, the elements within a tuple cannot be changed.

Example:


# Example of an immutable tuple
my_tuple = (1, 2, 3)
# Attempting to modify the tuple will result in an error
my_tuple[0] = 10 

Output:


TypeError: 'tuple' object does not support item assignment

In the example above, trying to change the first element of the tuple my_tuple leads to a TypeError.

Allow Duplicates

Tuples can contain duplicate elements because they are indexed, allowing for items with the same value.

Example:


# Example of a tuple with duplicate elements
my_tuple = (1, 2, 3, 2, 4)
print(my_tuple)

Output:


(1, 2, 3, 2, 4)

In the example above, the tuple my_tuple contains the value 2 twice, making it possible to store duplicates.

The benefits of Tuple characteristics

Tuples’ immutability makes them useful in situations where you need to ensure that the elements of a collection remain constant throughout the program. Their ordering and ability to store duplicate elements also make them helpful in scenarios where you want to maintain the sequence of elements or need to group related data.

Data Types in Tuples

You can have elements of various data types within a tuple. Here I show an example:

Example:


my_tuple = (1, "Hello", 3.14, True)
print(my_tuple)

Output:


(1, 'Hello', 3.14, True)

Check Tuple Type

Similar to any other data type checking, in Python we can also check if a variable is a tuple or not by using the type() function.

Example:


my_tuple = (1, 2, 3)
print(type(my_tuple)) 

Output:


<class 'tuple'>

Check Tuple Length

If you want to check the number of elements stored in a tuple variable we can use common Python function that can be used to find the number of elements in a tuple, called len() function.

Example:


my_tuple = (1, 2, 3)
print(len(my_tuple)) 

Output:


3

The tuple() Constructor

You can create a tuple using the tuple() constructor. It accepts an iterable (e.g., list, string, set) and converts it into a tuple.

Example:


# Using the tuple() constructor to create a tuple
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple) 

Output:


(1, 2, 3)

Nested Tuple

Nested tuples are tuples that contain other tuples as elements. They are a way to organize and represent structured data with multiple levels of hierarchy.

Example:


# Creating a nested tuple
nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))

# You can access nested tuples in this way
print(nested_tuple)

# Or You can access nested tuples in this way
element = nested_tuple[1][0]  # Accesses the element 3 from the second tuple
print(element)  
element = nested_tuple[2][2]
print(element)  

# Or you can access nested tuples in this way using for loop
# Printing the nested tuple
for inner_tuple in nested_tuple:
    print(inner_tuple)

Output:


((1, 2, 3), (4, 5, 6), (7, 8, 9))
4
9
(1, 2, 3)
(4, 5, 6)
(7, 8, 9)

Access Tuple Items

Accessing tuple items involves retrieving specific elements from a tuple. Python provides several techniques to do this.

In this section, we will explore positive indexing, negative indexing, positive range indexing, negative range indexing, and practice tuple slicing.

If you are a beginner or intermediate Python programmer, understanding these indexing techniques and practicing tuple slicing will help you efficiently access and manipulate tuple elements in your Python programs.

Positive Indexing

Positive indexing refers to accessing elements by their position from the beginning of the tuple, starting with index 0 for the first element.

As we mentioned in above, the positive indexing starts from the first element with index 0 and goes up sequentially or incrementally.

Example:


my_tuple = (10, 20, 30, 40)
print(my_tuple[0])  
print(my_tuple[2])  

Output:


10
30

In the example above, my_tuple[0] accesses the first element (10) and my_tuple[2] accesses the third element (30).

Negative Indexing

Negative indexing starts from the last element with index -1 and goes in reverse order.

This type of indexing (Negative indexing) allows you to access elements by their position from the end of the tuple, starting with index -1 for the last element.

Example:


my_tuple = (10, 20, 30, 40)
print(my_tuple[-1])  
print(my_tuple[-3])  

Output:


40
20

Here, my_tuple[-1] accesses the last element (40) and my_tuple[-3] accesses the third-to-last element (20).

Positive Range Indexing

Positive range indexing enables you to access a range of elements using a start index and an end index.

You can also access a range of elements using positive indices.

Example:


my_tuple = (10, 20, 30, 40)
print(my_tuple[1:3]) 

Output:


(20, 30)

In this example, my_tuple[1:3] accesses elements at index 1 and 2, which are 20 and 30, respectively.

Negative Range Indexing

Negative range indexing can also be used to access a range of elements. This indexing technique will allow you to access a range of elements using negative indices.

Example:


my_tuple = (10, 20, 30, 40)
print(my_tuple[-3:-1])

Output:


(20, 30)

Here, my_tuple[-3:-1] accesses elements from index -3 to -2 (exclusive), resulting in (20, 30).

More Practice About Python Tuple Slicing

You can use slicing to extract specific subsets from a tuple.

Example:


my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(my_tuple[::2]) 

Output:


(1, 3, 5, 7, 9)

In the example above, my_tuple[::2] starts from the beginning and selects every second element, resulting in (1, 3, 5, 7, 9).

What is Tuple Slicing

Slicing Tuples in Python refers to the process of extracting a portion (subsequence) of a sequence, such as a tuple.

It allows you to create a new sequence containing selected elements from the original sequence. Slicing is done using a specific syntax that specifies the start, stop, and step parameters.

The general syntax for slicing is: sequence[start:stop:step]

Where:

  • start: The index of the first element to include in the slice (inclusive).
  • stop: The index of the first element to exclude from the slice (exclusive).
  • step: The interval between elements in the slice, this is optional.

Here we provide some examples to illustrate slicing in Tuples in Python:

Example:


# Slicing a tuple
my_tuple = (10, 20, 30, 40, 50, 70, 80)

print(my_tuple[1:3])    
print(my_tuple[:3])    
print(my_tuple[::2])    
print(my_tuple[::-1]) 
print(my_tuple[-3:-1]) 
print(my_tuple[1:5:2])
subtuple = my_tuple[2:]
print(subtuple)

Output:


(20, 30)
(10, 20, 30)
(10, 30, 50, 80)
(80, 70, 50, 40, 30, 20, 10)
(50, 70)
(20, 40)
(30, 40, 50, 70, 80)

What is not Slicing

Slicing involves extracting a range of elements from a sequence, while indexing allows you to access a specific element at a particular position.

Therefore, accessing individual elements in a tuple using indexing is not slicing.

Example:


# This is not Slicing a tuple
my_tuple = (10, 20, 30, 40, 50, 70, 80)

print(my_tuple[0])  
print(my_tuple[2])  

print(my_tuple[-1])  
print(my_tuple[-3])

Output:


10
30
80
50

In the above code, it is not slicing because you are directly accessing specific elements in the tuple my_tuple using positive and negative indexing. To demonstrate slicing, you would use the colon (:) notation to extract a range of elements from the tuple, like the examples mentioned above.

Update tuples Items

As we already discussed the Tuple characteristics, the Tuples are immutable, which means you cannot update, delete or change their elements directly after creation. However, there are ways to create a modified version of a tuple.

Change Tuple Items

Since tuples are immutable or unchangeable, you need to follow the following steps

  • convert them into a mutable data type (such as a list),
  • make the desired changes, and
  • finally convert the modified list back into a tuple.

Example:


my_tuple = (10, 20, 30, 40, 50, 70, 80)
my_list = list(my_tuple)
my_list[5] = 60 #changes the 70 to 60
my_tuple = tuple(my_list)
print(my_tuple)

Output:


(10, 20, 30, 40, 50, 60, 80)

Change Tuple Items Using Tuple Slicing

You can change specific elements in a tuple using tuple slicing. We can change the target item in a tuple and modify it with a new item, you effectively achieve the desired change.

Example:


my_tuple = (1, 2, 3, 4)
print(my_tuple)
my_tuple = my_tuple[:2] + (8,) + my_tuple[3:]
print(my_tuple) 

Output:


(1, 2, 3, 4)
(1, 2, 8, 4)

Add items in a Tuple

Tuples are immutable, which means you cannot directly add or remove items from them after they’re created. However, you can create a new tuple by concatenating or combining existing tuples. Here are we show you a few techniques you can “add” items to a tuple:

Concatenation (Join Tuples)

You can create a new tuple by concatenating two or more tuples together using the + operator (combining two tuple values or adding a tuple to a tuple).

Example:


tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
new_tuple = tuple1 + tuple2
print(new_tuple) 

Output:


(1, 2, 3, 4, 5, 6)

Using the += operator

Similar to the above, you can also use the += operator to concatenate tuples.

Example:


tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
tuple1 += tuple2
print(tuple1) 

Output:


(1, 2, 3, 4, 5, 6)

Repetition (Multiplying)

You can create a new tuple by repeating an existing tuple a certain number of times.

Example:


tuple1 = (1, 2, 3)
new_tuple = tuple1 * 3
print(new_tuple)

Output:


(1, 2, 3, 1, 2, 3, 1, 2, 3)

Convert to a list

You can convert a tuple to a list and then use the append() method to add a new item to the list and then convert it back to a tuple:

Example:


# Convert a tuple to a list
my_tuple = (1, 2, 3)
print( my_tuple) 
my_list = list(my_tuple)
my_list.append(88)
my_tuple = tuple(my_list)
print(my_tuple) 

Output:


(1, 2, 3)
(1, 2, 3, 88)

The Immutability of Tuples: Why the insert() Method Cannot Be Used

In Python, we cannot use the insert() method to add a value to a tuple directly because tuples are immutable in Python. Once a tuple is created, you cannot modify its contents, which includes adding or removing elements.

However, you can achieve the effect of adding an item to a tuple by creating a new tuple that includes the new item. Here’s how you can do it:

Example:


# Original tuple
my_tuple = (1, 2, 3)

# Value to be added
new_item = 4

# Create a new tuple with the added item
new_tuple = my_tuple + (new_item,)

print("Original tuple:", my_tuple) 
print("New tuple:", new_tuple)     

Output:


Original tuple: (1, 2, 3)
New tuple: (1, 2, 3, 4)

Remove Tuple Items

As we explained earlier, in Python, tuples are immutable, which means you cannot directly remove items from a tuple after it has been created. However, there are alternative methods to achieve a similar effect by creating new tuples with the desired items removed.

Can we Remove Tuple Items Using remove() or pop()Methods

Tuples do not support or have a remove() or pop()methods like lists do, as they are designed to be unchangeable. If you need to remove a specific value from a tuple, you can create a new tuple without that value using slicing and concatenation.

Example:


my_tuple = (1, 2, 3, 2)
value_to_remove = 2
new_tuple = my_tuple[:my_tuple.index(value_to_remove)] + my_tuple[my_tuple.index(value_to_remove) + 1:]
print(new_tuple)

Output:


(1, 3, 2)

In the above example, the value_to_remove is removed from the tuple my_tuple by slicing the tuple before and after the index of the value and then concatenating the resulting slices.

Alternative Ways to Remove an Item from Tuple

You can convert the tuple to a list, perform the removal operation using list methods, and then convert the modified list back to a tuple.

Alternative One: Using the Remove Method

In this procedure we first convert the tuple variable to a list variable using the list() method then use the remove() method to perform the remove operation and finally convert the modified list back to a tuple using the tuple() method.

Example:


my_tuple = (1, 2, 3, 2)  # Original tuple

my_list = list(my_tuple)  # Convert tuple to list
my_list.remove(2)         # Remove the first occurrence of 2 from the list

my_tuple = tuple(my_list)  # Convert list back to tuple
print(my_tuple)

Output:


(1, 3, 2)

In the above example, the value 2 appears twice in the original tuple. After converting it to a list and using the remove() method, only the first occurrence of 2 is removed. Then, the modified list is converted back into a tuple, resulting in the output (1, 3, 2).

Alternative Two: Using the Pop Method

Similar to the previous procedure, this technique we first convert the tuple variable to a list variable using the list() method then use the pop() method to perform the remove operation from the list at a specific index and finally convert the modified list back to a tuple using the tuple() method.

Example:


my_tuple = (1, 2, 3, 2)  # Original tuple

my_list = list(my_tuple)  # Convert tuple to list
my_list.pop(2)            # Remove item at index 2 (value 3)

my_tuple = tuple(my_list)  # Convert list back to tuple
print(my_tuple)           

Output:


(1, 2, 2)

As the example above shows, the value 3 is at index 2 in the original tuple. After converting the tuple to a list and using the pop() method to remove the item at index 2, the modified list is then converted back to a tuple, resulting in the output (1, 2, 2).

Remove Tuple Items Using del Statement

Since tuples are immutable, you can use the del statement to completely delete all items directly from them.

Example:


my_tuple = (1, 2, 3, 2)  # Original tuple

del my_tuple      
 
print(my_tuple)

Output:


Traceback (most recent call last):
  File "/Users/......../Tuples.py", line 128, in <module>
    print(my_tuple)
NameError: name 'my_tuple' is not defined

After you use del my_tuple, the variable my_tuple is no longer defined, so attempting to print it will result in a NameError since the variable doesn’t exist anymore.

Unpacking Tuple

Tuple unpacking in Python is a powerful technique that allows you to quickly assign the elements of a tuple to separate variables. It can be used not only for tuples but also for other iterable data types like lists, strings, and dictionaries (for keys).

Tuple unpacking is a concise and elegant way to work with tuple data. It can simplify your code, making it more readable and efficient, especially when dealing with structured or multiple values.

Unpacking into Variables

You can unpack the elements of a tuple into variables using the following syntax:

Example:


# Unpacking a tuple into variables
tuple1 = (10, 20, 30)
x, y, z = tuple1
print("x:", x)  
print("y:", y)  
print("z:", z) 

Output:


x: 10
y: 20
z: 30

Unpacking with Asterisk (*)

You can use the asterisk (*) to unpack the remaining elements of a tuple into a single variable. This is useful when the number of variables doesn’t match the number of tuple elements.

Example:


# Unpacking with an asterisk
tuple_1 = (40, 50, 60, 70, 80)
a, *b, c = tuple_1
print("a:", a) 
print("b:", b) 
print("c:", c)  

# Example 2
tuple_2 = ("John", 37, "PhD", "+90875637389", "Sports")
name, age, profession, tell, *others, = tuple_2
print("name:", name) 
print("age:", age) 
print("profession:", profession) 
print("tell:", tell) 
print("others:", others) 

Output:


a: 40
b: [50, 60, 70]
c: 80
name: John
age: 37
profession: PhD
tell: +90875637389
others: ['Sports']

Ignoring Unwanted Elements

You can use an underscore (_) to ignore certain elements during unpacking. This is useful when you’re interested in only a subset of the elements.

Example:


# Ignoring unwanted elements
tuple_3 = (100, 200, 300, 400)
first, *_ = tuple_3
print("first:", first) 

Output:


first: 100

Unpacking Nested Tuples

You can unpack elements from nested tuples into separate variables.

Example:


# Unpacking nested tuples
nested_tuple = ((1, 2), (3, 4))
(a, b), (c, d) = nested_tuple
print("a:", a)  
print("b:", b)  
print("c:", c)  
print("d:", d)  

Output:


a: 1
b: 2
c: 3
d: 4

Unpacking: Swap Values Between Variables

Unpacking can also be used to swap values between variables without using a temporary variable:

Example:


a = 5
b = 10
a, b = b, a  # Swap the values of a and b
print("a:", a)  
print("b:", b) 

Output:


a: 10
b: 5

Looping Through Tuple Items in Python

Looping through tuple items is a process that involves iterating over each element in a tuple to perform specific actions or operations. Python provides various methods for looping through tuple items, mainly using for loops and while loops.

Remember, if you are a beginner in Python programming, looping through tuple items using both for and while loops is a fundamental skill in Python programming. These loops allow you to perform actions on each item or based on specific conditions, providing you with flexibility when working with tuples and other iterable data structures. We discuss them as follows:

Looping with for Loop

Basic for Loop

The basic for loop is used to iterate through each element in a tuple.

Example:


my_tuple = (1, 2, 3, 4)

for item in my_tuple:
    print(item)

Output:


1
2
3
4

Looping with Index and Value

You can also loop through tuple items along with their indices using the enumerate() function.

Example:


my_tuple = ('apple', 'banana', 'cherry')

for index, value in enumerate(my_tuple):
    print(f"Index {index}: {value}")

Output:


Index 0: apple
Index 1: banana
Index 2: cherry

Looping with while Loop

Basic while Loop

A basic while loop can be used to iterate through tuple items by tracking an index.

Example:


my_tuple = (5, 10, 15, 20)
index = 0

while index < len(my_tuple):
    print(my_tuple[index])
    index += 1

Output:


5
10
15
20

Looping with Condition and Index

You can also loop through tuple items while using a while loop with a condition and index tracking.

Example:


my_tuple = ('red', 'green', 'blue', 'yellow', 'blue')
index = 0
while index < len(my_tuple):
    if my_tuple[index] == 'blue':
        break
    print(my_tuple[index])
    index += 1

Output:


red
green

Tuple Comprehensions

In Python, tuple comprehensions are a concise way to create tuples based on some expression or operation applied to each item in an iterable. While list comprehensions are more commonly used, tuple comprehensions provide a similar functionality but produce tuples instead of lists.

Example:


# Create a tuple of even numbers from 1 to 10 using tuple comprehension
even_numbers = tuple(x for x in range(1, 11) if x % 2 == 0)

print(even_numbers)  

Output:


(2, 4, 6, 8, 10)

Benefits and Usages of Tuple Comprehensions

  1. Creating Tuples: Tuple comprehensions are useful for quickly creating tuples from existing iterables, such as lists, other tuples, or ranges.
  2. Immutability: Tuples are immutable, meaning they cannot be modified after creation. Tuple comprehensions help create new tuples based on existing data without changing the original data.
  3. Readable Code: They make your code concise and readable by expressing the creation of tuples in a single line.

Here is another examples to illustrate tuple comprehensions:

Example:


# Tuple comprehension in Python
var_tuple_numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

# Squaring each number in the tuple using tuple comprehension
# syntax: var_tuple = tuple(expression for item in iterable if condition)
var_squared_tuple_numbers = tuple(num**2 for num in var_tuple_numbers)

print(var_squared_tuple_numbers)

Output:


(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

Compare Tuples

Tuples can be compared using standard comparison operators (<, <=, >, >=, ==, !=) to check if they are equal or determine their relative order.

Example:


tuple1 = (1, 2, 3)
tuple2 = (1, 2, 4)

# Compare tuples
if tuple1 == tuple2:
    print("Tuples are equal")
else:
    print("Tuples are not equal")  

Output:


Tuples are not equal

Perform Mathematical Operations in Tuples

You can perform mathematical operations on tuple elements without changing the original tuple.

Example:


tuple1 = (1, 2, 3)
sum_tuple = sum(tuple1)  # Calculate the sum of elements
average = sum_tuple / len(tuple1)  # Calculate the average
print("Sum:", sum_tuple)  
print("Average:", average) 

Output:


Sum: 6
Average: 2.0

Eliminate Duplicates in Tuples

You can eliminate duplicate values from a tuple by converting it to a set (since sets automatically remove duplicates) and then back to a tuple.

Example:


tuple_with_duplicates = (1, 2, 2, 3, 4, 4, 5)
tuple_without_duplicates = tuple(set(tuple_with_duplicates))
print(tuple_without_duplicates)  

Output:


(1, 2, 3, 4, 5)

Convert Tuples to Other Data Types

In Python, you can convert tuples to various other data types such as integers, floats, sets, dictionaries, and lists. These conversions can be useful for manipulating and processing data in different ways. Here I show you some of the ways you can perform such conversions:

Convert Tuples to Integers or Floats

You can convert a tuple containing numeric values to integers or floats. If the tuple contains a single numeric value, you can convert it directly. If it contains multiple values, you may need to decide how to handle them.

The following example uses tuples with only single value.

Example:


# Converting a single numeric value tuple to an integer
int_tuple = (42,)
integer_value = int(int_tuple[0])
print("Integer:", integer_value) 

# Converting a single numeric value tuple to a float
float_tuple = (3.14,)
float_value = float(float_tuple[0])
print("Float:", float_value) 

Output:


Integer: 42
Float: 3.14

The following example uses tuples with multiple numerical values.

This example shows a tuple containing multiple values, and we’ll convert these values to both integers and floats:

Example:


# Tuple with multiple numeric values
tuple_with_multiple_values = (10, 20, 30, 40, 50)

# Convert each value to integers
int_values = tuple(int(x) for x in tuple_with_multiple_values)

# Convert each value to floats
float_values = tuple(float(x) for x in tuple_with_multiple_values)

print("Original Tuple:", tuple_with_multiple_values)
print("Integers:", int_values)
print("Floats:", float_values)

Output:


Original Tuple: (10, 20, 30, 40, 50)
Integers: (10, 20, 30, 40, 50)
Floats: (10.0, 20.0, 30.0, 40.0, 50.0)

Convert Tuples to Sets

A tuple can be converted to a set to remove duplicates and work with unique elements.

Example:


tuple_with_duplicates = (1, 2, 2, 3, 4, 4, 5)
set_from_tuple = set(tuple_with_duplicates)
print(set_from_tuple)  

Output:


{1, 2, 3, 4, 5}

Convert Tuples to Dictionaries

You can convert a tuple of key-value pairs into a dictionary. Each element in the tuple should be a tuple itself containing a key and its corresponding value.

Example:


tuple_of_pairs = (("Name", "John Murry"), ("Age", 55), ("Tell", +90866373893))
dict_from_tuple = dict(tuple_of_pairs)
print(dict_from_tuple) 

Output:


{'Name': 'John Murry', 'Age': 55, 'Tell': 90866373893}

Convert Tuples to Lists

You can convert a tuple to a list if you need to modify or manipulate the data, as lists are mutable.

Example:


tuple_to_list = (1, 2, 3)
list_from_tuple = list(tuple_to_list)
print(list_from_tuple) 

Output:


[1, 2, 3]

Tuple Methods

In Python, tuples are immutable, ordered collections of elements. While tuples do not have as many built-in methods as lists, they still provide some useful methods for working with and manipulating tuple data. Here are some of the key built-in methods that you can use with tuples, along with examples:

count() Method

This method counts the number of occurrences of a specified value in the tuple.

Example:


my_tuple = (1, 2, 3, 2, 4, 2)
count_of_2 = my_tuple.count(2)
print(count_of_2) 

Output:


3

index() Method

This method returns the index (position) of the first occurrence of a specified value in the tuple.

Example:


my_tuple = ('apple', 'banana', 'cherry', 'apple')
index_of_cherry = my_tuple.index('cherry')
print(index_of_cherry) 

Output:


2

len() Method

Although not a method specific to tuples, len() can be used to get the length (number of elements) of a tuple.

Example:


my_tuple = (5, 2, 8, 1, 9)
sorted_list = sorted(my_tuple)
print(sorted_list) 

Output:


[1, 2, 5, 8, 9]

Remember, since tuples are immutable, these methods do not modify the original tuple but return new values or data structures based on the tuple’s contents.

Conclusion

In conclusion, this article has provided a comprehensive overview of Python tuples, a fundamental data structure with unique characteristics and versatile applications.

Understanding tuples is essential for effective Python programming, as they offer a means of structuring and organizing data that remains unchanged throughout the program’s execution. Whether you’re dealing with coordinates, key-value pairs, or any ordered data, tuples provide a reliable and efficient solution.

References

w3schools

Python Docs

Categorized in: