Python Programming/Tuples
A tuple in Python is much like a list except that it is immutable (unchangeable) once created.
Tuple notation
Tuples may be created directly or converted from lists. Generally, tuples are enclosed in parentheses.
>>> l = [1, 'a', [6, 3.14]] >>> t = (1, 'a', [6, 3.14]) >>> t (1, 'a', [6, 3.1400000000000001]) >>> tuple(l) (1, 'a', [6, 3.1400000000000001]) >>> t == tuple(l) True >>> t == l False
A one item tuple is created by a item in parens followed by a comma:
>>> t = ('A single item tuple',) >>> t ('A single item tuple',)
Also, tuples will be created from items separated by commas.
>>> t = 'A', 'tuple', 'needs', 'no', 'parens' >>> t ('A', 'tuple', 'needs', 'no', 'parens')
Packing and Unpacking
You can also perform multiple assignment using tuples.
>>> article, noun, verb, adjective, direct_object = t >>> noun 'tuple'
Note that either, or both sides of an assignment operator can consist of tuples.
>>> a, b = 1, 2 >>> b 2
The example above: article, noun, verb, adjective, direct_object = t is called "tuple unpacking". "Tuple packing" is the reverse: t=article, noun, verb, adjective, direct_object. When unpacking a tuple, or performing multiple assignment, you must have the same number of variables being assigned to as values being assigned.
Operations on tuples
These are the same as for lists except that we may not assign to indices or slices, and there is no "append" operator.
>>> a = (1, 2) >>> b = (3, 4) >>> a + b (1, 2, 3, 4) >>> a (1, 2) >>> b (3, 4) >>> a.append(3) Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'tuple' object has no attribute 'append' >>> a (1, 2) >>> a[0] = 0 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object does not support item assignment >>> a (1, 2)
For lists we would have had:
>>> a = [1, 2] >>> b = [3, 4] >>> a + b [1, 2, 3, 4] >>> a [1, 2] >>> b [3, 4] >>> a.append(3) >>> a [1, 2, 3] >>> a[0] = 0 >>> a [0, 2, 3]
Tuple Attributes
Length: Finding the length of a tuple is the same as with lists; use the built in len() method.
>>> len( ( 1, 2, 3) ) 3 >>> a = ( 1, 2, 3, 4 ) >>> len( a ) 4
Conversions
Convert list to tuples using the built in tuple() method.
>>> l = [4, 5, 6] >>> tuple(l) (4, 5, 6)
Converting a tuple into a list using the built in list() method to cast as a list:
>>> t = (4, 5, 6) >>> list(t) [4, 5, 6]
Dictionaries can also be converted to tuples of tuples using the items method of dictionaries:
>>> d = {'a': 1, 'b': 2} >>> tuple(d.items()) (('a', 1), ('b', 2))
Uses of Tuples
Tuples can be used like lists and are appropriate when a list may be used but the size is known and small. One very useful situation is returning multiple values from a function. To return multiple values in many other languages requires creating an object or container of some type, but in Python it is easy:
def func(x,y): # code to compute x and y return (x,y)
This can be combined with the unpacking technique above in later code to retrieve both return values:
(x,y) = func(1,2)
Using List Comprehension to process Tuple elements
Occasionally, there is a need to manipulate the values contained within a tuple in order to create a new tuple. For example, if we wanted a way to double all of the values within a tuple, we can combine some of the above information in addition to list comprehension like this:
def double(T): 'double() - return a tuple with each tuple element (e) doubled.' return tuple( [ int( e * 2 ) for e in T ] )
External links
- Python documentation, chapter "Sequence Types" -- python.org
- Python documentation, chapter "Tuples and Sequences" -- python.org