# Python Tuple (iteration, empty tuple, length, index, addition)

A Python tuple is a ordered and immutable set of objects declared with parentheses.

a = (1, 2, 3)

print(a)  # (1, 2, 3)
print(type(a))  # <class 'tuple'>


A tuple has an order like list. A set doesn't have an order.

a = (2, 3, 1)
b = {2, 3, 1}

print(a)  # (2, 3, 1)
print(b)  # {1, 2, 3}


A tuple is often used in NumPy, pandas, and common SQL libraries.

## Iterate tuple

A Python tuple can be iterated and each element of a tuple is accessed in for statement.

a = (2, 3, 1)

for i in a:
print(i)

# 2
# 3
# 1


Any object can be an element of a tuple.

x = [1, 2]
a = ('A', 3, x, 0.12)

for i in a:
print(i)

# A
# 3
# [1, 2]
# 0.12


## The empty tuple

Only parentheses mean an empty tuple.

a = ()
b = (1, 2, 3)

print(type(a))  # <class 'tuple'>
print(type(b))  # <class 'tuple'>


## A tuple containing only one element

t = (1)

print(t)  # 1
print(type(t))  # <class 'int'>


A tuple that has only one element is not a tuple.

## The Length of a tuple

The len() returns the number of elements in a tuple. This number is called the "length" of a tuple.

a = ()
b = (1, 2, 3)

x = len(a)
y = len(b)

print(x)  # 0
print(y)  # 3


The length of an empty tuple is 0.

## The Index of a tuple

The first element of a tuple has 0 index.

a = (5, 6, 7)

print(a)  # 5
print(a)  # 6
print(a)  # 7
print(a)  # IndexError: tuple index out of range

print(a[-1])  # 7
print(a[-2])  # 6
print(a[-3])  # 5
print(a[-4])  # IndexError: tuple index out of range


The number inside brackets is called index and in this case index can be -3, -2, -1, 0, 1, 2. Other index is error because this tuple has only 3 items.

a = (5, 6, 7)
b = ('Apple', 'Microsoft')

c = a + b

print(c)
# (5, 6, 7, 'Apple', 'Microsoft')


## Get a reversed tuple

Python slicing syntax enables to make the reversed tuple in the same way as reversing a list. You can't change a tuple itself because it's immutable. List has "reverse" method but tuple doesn't. How to reverse a tuple in Python explains in detail.

a = (4, 5, 6, 7)
b = a[::-1]

print(b)  # (7, 6, 5, 4)
print(type(b))  # <class 'tuple'>


## Unpack a tuple

Getting each value from a tuple is called unpack in Python.

a = (4, 5, 6)

x, y, z = a

print(x)  # 4
print(y)  # 5
print(z)  # 6


A trailing comma is ignored in Python.

a = (4, 5, 6,)

x, y, z = a

print(x)  # 4
print(y)  # 5
print(z)  # 6


Unpacked variables can be expressed by underscores as follows.

a = (4, 5, 6)

x, y, _ = a

print(x)  # 4
print(y)  # 5


In this case, the underscore is assigned the value.

a, b, _ = (1, 2, 3)

print(_)  # 3


If there are more than one underscores, the underscore represents only the last element.

a, _, _ = (1, 2, 3)

print(_)  # 3


## The number of elements in a tuple and a trailing comma

A tuple may have a trailing comma. Whether the tuple has it or not, the number of elements remains the same.

a = (4, 5, 6, 7,)

print(len(a))  # 4


## Tuple is immutable

A tuple is immutable so can't be added, removed, sorted. But you can assign other tuples to the same variable, though the id of it changes by assigning.

a = (4, 5, 6)
print(id(a))  # 4555645504

a = (7, 8)
print(id(a))  # 4554475456


## String as a tuple

t = ('Mac' 'Book')

print(t)  # MacBook


You can concatenate strings in a tuple without commas.