Python Programming/Tuples
A tuple in Python is much like a list except that it is immutable (unchangeable) once created.
Contents |
Tuple notation [edit]
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 [edit]
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 [edit]
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 [edit]
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 [edit]
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 [edit]
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 [edit]
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 [edit]
- Python documentation, chapter "Sequence Types" -- python.org
- Python documentation, chapter "Tuples and Sequences" -- python.org