Python has several sequential data types that allow you to store collections of data in an organized and efficient way. The basic sequence types are strings, lists, tuples, and range objects.
This article will walk you through the basics of Python tuples. We’ll show you how to create a tuple, access elements, unpack a tuple, and more.
Tuples are similar to lists , with the main difference being that the lists are mutable while the tuples are immutable. This means that the tuples can not be changed after creation.
Tuples can store both heterogeneous and homogeneous data but are generally used to store collections of heterogeneous elements.
Creating Tuples
Tuples are created by placing the items inside a pair of round brackets []
, separated by commas. They can have any number of items, which can be of different types. Here is an example:
colors = ('orange', 'white', 'green')
A tuple can have items with mixed data types. You can also declare nested tuples where one more more of its items are lists, tuples or dictionaries:
my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))
Round brackets with no elements in between them denote an empty tuple:
my_tuple = ()
To create a tuple with only one element you must add a comma after the element:
my_tuple = (1)
type(my_tuple)
my_tuple = (1,)
type(my_tuple)
<class 'int'>
<class 'tuple'>
Tuples can be also constructed using the tuple()
constructor:
colors_list = ['orange', 'white', 'green']
colors_typle = tuple(colors_list)
print(type(colors_typle))
<class 'tuple'>
Another way to construct a tuple is to use the tuple packing feature, which allows you create a tuple from a sequence of comma-separated objects:
directions = "North", "South", "East", "West"
print(type(directions))
<class 'tuple'>
Accessing Tuple Elements
A tuple item can be referenced by its index. Indexes are integers and starts from 0
to n-1
where n
is the number of items:
my_tuple = ["a", "b", "c", "d"]
0 1 2 3
In Python indexes are specified with square brackets:
my_tuple[index]
For example to access the third element of the tuple, you would tuple_name[2]
:
directions = ("North", "South", "East", "West")
directions[2]
'East'
If you reference an index that doesn’t exist, an IndexError
exception is raised:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
To access items in a nested tuple use multiple indexes:
my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))
my_tuple[3][1]
'bar'
You can also access the tuple elements using negative indexes. The last item is referred to as -1
, the second last item as -2
and so on:
my_tuple = ("a", "b", "c", "d")
-4 -3 -2 -1
directions = ("North", "South", "East", "West")
directions[-2]
'East'
Slicing Tuples
In Python, you can slice a tuple and other sequential data types using the following form:
sequence[start:stop:step]
start
is the index at which the extraction begins. When a negative index is used, it indicates an offset from the end of the tuple. If this argument is omitted, slicing begins from index 0.stop
is the index before which to end extraction; the result doesn’t include the “stop” element. When a negative index is used, it indicates an offset from the end of the tuple. If this argument is omitted or greater than the length of the tuple, slicing goes to the end of the tuple.step
is an optional argument and specifies the step of the slicing. When not specified, it defaults to 1. If a negative value is used, the slice takes elements in reverse order.
The result of slicing a tuple is a new tuple containing the extracted elements.
The following forms are legal in Python:
T[:] # copy whole tuple
T[start:] # slice the tuple starting from the element with index "start" to the end of the tuple.
T[:stop] # slice the tuple starting from the begging up to but not including the element with index "stop".
T[start:stop] # slice the tuple starting from the element with index "start" up to but not including the element with index "stop".
stop"
T[::step] # slice the tuple with a stride of "step"
Below is an example of how to slice a tuple starting from the element with index 1 up to but not including the element with index 4:
vegetables = ('Potatoes', 'Garlic', 'Celery', 'Carrots', 'Broccoli')
vegetables[1:4]
('Garlic', 'Celery', 'Carrots')
Unpacking Tuples
Sequence unpacking in a Python feature that allows you to take assign sequence objects to variables. Here is an example:
colors = ('orange', 'white', 'green')
a, b, c = colors
print(a)
print(b)
print(c)
The values of the tuple elements according to their position, are assigned to the variables on the left:
orange
white
green
When unpacking tuples, the number of variables on the left side tuple must be the same as the number of the tuple elements. Otherwise, you’ll get a ValueError
exception.
colors = ('orange', 'white', 'green')
a, b = colors
ValueError: too many values to unpack (expected 2)
Unpacking is handy when a method or function returns a sequence of objects:
def square_area_circumference(side_lenght):
return side_lenght * side_lenght, side_lenght * 4
area, circumference = square_area_circumference(5)
print(area)
print(circumference)
25
20
Changing a Tuple
Since tuples are immutable data structures, we can not update them directly. You can not add, change, remove elements in tuples.
If you try to change a tuple element you’ll get TypeError
exception:
colors = ("orange", "white", "green")
colors[1] = "blue"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Elements of a mutable tuple items can be changed. For example, if the tuple has a list as one of its elements, you can update the list elements:
my_tuple = (1, 2, [5, 6, 7])
my_tuple[2][1] = 4
print(my_tuple)
(1, 2, [5, 4, 7])
Tuple Length
The built-in len()
function returns the total number of items of a given object.
To find a length of a tuple, pass it as an argument to the len()
function:
len(L)
Here is an example:
colors = ("orange", "white", "green")
lenght = len(colors)
print(lenght)
3
Iterating Through a Tuple
To iterate through all elements in a tuple, you can use the for
loop:
directions = ("North", "South", "East", "West")
for direction in directions:
print(direction)
North
South
East
West
If you need indexes, you have several methods at your disposal. The most common ways are to combine the range()
and len()
functions or to use the built-in enumerate()
function.
The example below shows how to retrieve the index and the value of each item in the tuple:
directions = ("North", "South", "East", "West")
for i in range(len(directions)):
print("Index {} : Value {}".format(i, directions[i]))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West
Instead of using the range(len(...))
pattern, you can use the enumerate()
function to loop over a tuple in a more Pythonic way:
directions = ("North", "South", "East", "West")
for index, value in enumerate(directions):
print("Index {} : Value {}".format(index, value))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West
Check if an Element Exists
To check whether an element exist in a tuple, you can use the in
and not in
operators:
colors = ("orange", "white", "green")
print("orange" in colors)
The output will be either True
or False
:
True
Here is another example using the if
statement :
colors = ("orange", "white", "green")
if "blue" not in colors:
print("no")
else:
print("yes")
no
Tuple Methods
The tuple object accepts the following methods:
count(x)
– Returns the number of times ‘x’ appears in the tuple.index(x)
– Returns the position of the first occurrence of an element with a value of ‘x’.
Below is a simple example showing how to use the methods:
my_tuple = ("a", "s", "s", "q", "a", "n")
print(my_tuple.count('a'))
print(my_tuple.index('a'))
2
0
Conclusion
In Python, Tuples are immutable sequences of objects that can not be changed once created.
If you have any questions or feedback, feel free to leave a comment.