blob: 8cf58c85b312095ea306bcf26b68e6ebc6e233af [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. _tut-structures:
2
3***************
4Data Structures
5***************
6
7This chapter describes some things you've learned about already in more detail,
8and adds some new things as well.
9
Georg Brandl116aa622007-08-15 14:28:22 +000010.. _tut-morelists:
11
12More on Lists
13=============
14
15The list data type has some more methods. Here are all of the methods of list
16objects:
17
18
19.. method:: list.append(x)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000020 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000021
22 Add an item to the end of the list; equivalent to ``a[len(a):] = [x]``.
23
24
25.. method:: list.extend(L)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000026 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000027
28 Extend the list by appending all the items in the given list; equivalent to
29 ``a[len(a):] = L``.
30
31
32.. method:: list.insert(i, x)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000033 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000034
35 Insert an item at a given position. The first argument is the index of the
36 element before which to insert, so ``a.insert(0, x)`` inserts at the front of
37 the list, and ``a.insert(len(a), x)`` is equivalent to ``a.append(x)``.
38
39
40.. method:: list.remove(x)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000041 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000042
43 Remove the first item from the list whose value is *x*. It is an error if there
44 is no such item.
45
46
47.. method:: list.pop([i])
Christian Heimes4fbc72b2008-03-22 00:47:35 +000048 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000049
50 Remove the item at the given position in the list, and return it. If no index
51 is specified, ``a.pop()`` removes and returns the last item in the list. (The
52 square brackets around the *i* in the method signature denote that the parameter
53 is optional, not that you should type square brackets at that position. You
54 will see this notation frequently in the Python Library Reference.)
55
56
57.. method:: list.index(x)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000058 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000059
60 Return the index in the list of the first item whose value is *x*. It is an
61 error if there is no such item.
62
63
64.. method:: list.count(x)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000065 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000066
67 Return the number of times *x* appears in the list.
68
69
70.. method:: list.sort()
Christian Heimes4fbc72b2008-03-22 00:47:35 +000071 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000072
73 Sort the items of the list, in place.
74
75
76.. method:: list.reverse()
Christian Heimes4fbc72b2008-03-22 00:47:35 +000077 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000078
79 Reverse the elements of the list, in place.
80
81An example that uses most of the list methods::
82
83 >>> a = [66.25, 333, 333, 1, 1234.5]
Guido van Rossum0616b792007-08-31 03:25:11 +000084 >>> print(a.count(333), a.count(66.25), a.count('x'))
Georg Brandl116aa622007-08-15 14:28:22 +000085 2 1 0
86 >>> a.insert(2, -1)
87 >>> a.append(333)
88 >>> a
89 [66.25, 333, -1, 333, 1, 1234.5, 333]
90 >>> a.index(333)
91 1
92 >>> a.remove(333)
93 >>> a
94 [66.25, -1, 333, 1, 1234.5, 333]
95 >>> a.reverse()
96 >>> a
97 [333, 1234.5, 1, 333, -1, 66.25]
98 >>> a.sort()
99 >>> a
100 [-1, 1, 66.25, 333, 333, 1234.5]
101
102
103.. _tut-lists-as-stacks:
104
105Using Lists as Stacks
106---------------------
107
108.. sectionauthor:: Ka-Ping Yee <ping@lfw.org>
109
110
111The list methods make it very easy to use a list as a stack, where the last
112element added is the first element retrieved ("last-in, first-out"). To add an
113item to the top of the stack, use :meth:`append`. To retrieve an item from the
114top of the stack, use :meth:`pop` without an explicit index. For example::
115
116 >>> stack = [3, 4, 5]
117 >>> stack.append(6)
118 >>> stack.append(7)
119 >>> stack
120 [3, 4, 5, 6, 7]
121 >>> stack.pop()
122 7
123 >>> stack
124 [3, 4, 5, 6]
125 >>> stack.pop()
126 6
127 >>> stack.pop()
128 5
129 >>> stack
130 [3, 4]
131
132
133.. _tut-lists-as-queues:
134
135Using Lists as Queues
136---------------------
137
138.. sectionauthor:: Ka-Ping Yee <ping@lfw.org>
139
140
141You can also use a list conveniently as a queue, where the first element added
142is the first element retrieved ("first-in, first-out"). To add an item to the
143back of the queue, use :meth:`append`. To retrieve an item from the front of
144the queue, use :meth:`pop` with ``0`` as the index. For example::
145
146 >>> queue = ["Eric", "John", "Michael"]
147 >>> queue.append("Terry") # Terry arrives
148 >>> queue.append("Graham") # Graham arrives
149 >>> queue.pop(0)
150 'Eric'
151 >>> queue.pop(0)
152 'John'
153 >>> queue
154 ['Michael', 'Terry', 'Graham']
155
Georg Brandl718ce2c2010-03-21 09:51:44 +0000156However, since lists are implemented as an array of elements, they are not the
157optimal data structure to use as a queue (the ``pop(0)`` needs to move all
158following elements). See :ref:`tut-list-tools` for a look at
159:class:`collections.deque`, which is designed to work efficiently as a queue.
160
Georg Brandl116aa622007-08-15 14:28:22 +0000161
Georg Brandlfc11f272009-06-16 19:22:10 +0000162.. _tut-listcomps:
163
Georg Brandl116aa622007-08-15 14:28:22 +0000164List Comprehensions
165-------------------
166
Guido van Rossum0616b792007-08-31 03:25:11 +0000167List comprehensions provide a concise way to create lists from sequences.
168Common applications are to make lists where each element is the result of
Georg Brandl48310cd2009-01-03 21:18:54 +0000169some operations applied to each member of the sequence, or to create a
Guido van Rossum0616b792007-08-31 03:25:11 +0000170subsequence of those elements that satisfy a certain condition.
171
Georg Brandl7ae90dd2009-06-08 18:59:09 +0000172A list comprehension consists of brackets containing an expression followed
173by a :keyword:`for` clause, then zero or more :keyword:`for` or :keyword:`if`
174clauses. The result will be a list resulting from evaluating the expression in
175the context of the :keyword:`for` and :keyword:`if` clauses which follow it. If
176the expression would evaluate to a tuple, it must be parenthesized.
Guido van Rossum0616b792007-08-31 03:25:11 +0000177
178Here we take a list of numbers and return a list of three times each number::
179
180 >>> vec = [2, 4, 6]
181 >>> [3*x for x in vec]
182 [6, 12, 18]
183
184Now we get a little fancier::
185
Georg Brandle4ac7502007-09-03 07:10:24 +0000186 >>> [[x, x**2] for x in vec]
Guido van Rossum0616b792007-08-31 03:25:11 +0000187 [[2, 4], [4, 16], [6, 36]]
188
189Here we apply a method call to each item in a sequence::
Georg Brandl116aa622007-08-15 14:28:22 +0000190
191 >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
192 >>> [weapon.strip() for weapon in freshfruit]
193 ['banana', 'loganberry', 'passion fruit']
Guido van Rossum0616b792007-08-31 03:25:11 +0000194
Georg Brandle4ac7502007-09-03 07:10:24 +0000195Using the :keyword:`if` clause we can filter the stream::
Guido van Rossum0616b792007-08-31 03:25:11 +0000196
Georg Brandl116aa622007-08-15 14:28:22 +0000197 >>> [3*x for x in vec if x > 3]
198 [12, 18]
199 >>> [3*x for x in vec if x < 2]
200 []
Guido van Rossum0616b792007-08-31 03:25:11 +0000201
202Tuples can often be created without their parentheses, but not here::
203
Georg Brandla1c6a1c2009-01-03 21:26:05 +0000204 >>> [x, x**2 for x in vec] # error - parens required for tuples
Georg Brandl116aa622007-08-15 14:28:22 +0000205 File "<stdin>", line 1, in ?
206 [x, x**2 for x in vec]
207 ^
208 SyntaxError: invalid syntax
209 >>> [(x, x**2) for x in vec]
210 [(2, 4), (4, 16), (6, 36)]
Guido van Rossum0616b792007-08-31 03:25:11 +0000211
Georg Brandle4ac7502007-09-03 07:10:24 +0000212Here are some nested for loops and other fancy behavior::
Guido van Rossum0616b792007-08-31 03:25:11 +0000213
Georg Brandl116aa622007-08-15 14:28:22 +0000214 >>> vec1 = [2, 4, 6]
215 >>> vec2 = [4, 3, -9]
216 >>> [x*y for x in vec1 for y in vec2]
217 [8, 6, -18, 16, 12, -36, 24, 18, -54]
218 >>> [x+y for x in vec1 for y in vec2]
219 [6, 5, -7, 8, 7, -5, 10, 9, -3]
220 >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
221 [8, 12, -54]
222
Guido van Rossum0616b792007-08-31 03:25:11 +0000223List comprehensions can be applied to complex expressions and nested functions::
Georg Brandl116aa622007-08-15 14:28:22 +0000224
Georg Brandlf6945182008-02-01 11:56:49 +0000225 >>> [str(round(355/113, i)) for i in range(1, 6)]
Georg Brandl116aa622007-08-15 14:28:22 +0000226 ['3.1', '3.14', '3.142', '3.1416', '3.14159']
227
228
Christian Heimes0449f632007-12-15 01:27:15 +0000229Nested List Comprehensions
230--------------------------
231
232If you've got the stomach for it, list comprehensions can be nested. They are a
233powerful tool but -- like all powerful tools -- they need to be used carefully,
234if at all.
235
Georg Brandl48310cd2009-01-03 21:18:54 +0000236Consider the following example of a 3x3 matrix held as a list containing three
Christian Heimes0449f632007-12-15 01:27:15 +0000237lists, one list per row::
238
239 >>> mat = [
240 ... [1, 2, 3],
241 ... [4, 5, 6],
242 ... [7, 8, 9],
243 ... ]
244
Georg Brandl48310cd2009-01-03 21:18:54 +0000245Now, if you wanted to swap rows and columns, you could use a list
Christian Heimes0449f632007-12-15 01:27:15 +0000246comprehension::
247
Neal Norwitz752abd02008-05-13 04:55:24 +0000248 >>> print([[row[i] for row in mat] for i in [0, 1, 2]])
Christian Heimes0449f632007-12-15 01:27:15 +0000249 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
250
251Special care has to be taken for the *nested* list comprehension:
252
253 To avoid apprehension when nesting list comprehensions, read from right to
254 left.
255
256A more verbose version of this snippet shows the flow explicitly::
257
258 for i in [0, 1, 2]:
259 for row in mat:
Neal Norwitz752abd02008-05-13 04:55:24 +0000260 print(row[i], end="")
Benjamin Petersonbfc644b2008-07-05 23:39:56 +0000261 print()
Christian Heimes0449f632007-12-15 01:27:15 +0000262
Mark Dickinson934896d2009-02-21 20:59:32 +0000263In real world, you should prefer built-in functions to complex flow statements.
Christian Heimes0449f632007-12-15 01:27:15 +0000264The :func:`zip` function would do a great job for this use case::
265
Georg Brandl409c9d72008-08-08 06:44:14 +0000266 >>> list(zip(*mat))
Christian Heimes0449f632007-12-15 01:27:15 +0000267 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
268
269See :ref:`tut-unpacking-arguments` for details on the asterisk in this line.
270
Georg Brandl116aa622007-08-15 14:28:22 +0000271.. _tut-del:
272
273The :keyword:`del` statement
274============================
275
276There is a way to remove an item from a list given its index instead of its
277value: the :keyword:`del` statement. This differs from the :meth:`pop` method
278which returns a value. The :keyword:`del` statement can also be used to remove
279slices from a list or clear the entire list (which we did earlier by assignment
280of an empty list to the slice). For example::
281
282 >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
283 >>> del a[0]
284 >>> a
285 [1, 66.25, 333, 333, 1234.5]
286 >>> del a[2:4]
287 >>> a
288 [1, 66.25, 1234.5]
289 >>> del a[:]
290 >>> a
291 []
292
293:keyword:`del` can also be used to delete entire variables::
294
295 >>> del a
296
297Referencing the name ``a`` hereafter is an error (at least until another value
298is assigned to it). We'll find other uses for :keyword:`del` later.
299
300
Georg Brandl5d955ed2008-09-13 17:18:21 +0000301.. _tut-tuples:
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000303Tuples and Sequences
304====================
305
306We saw that lists and strings have many common properties, such as indexing and
307slicing operations. They are two examples of *sequence* data types (see
308:ref:`typesseq`). Since Python is an evolving language, other sequence data
309types may be added. There is also another standard sequence data type: the
310*tuple*.
311
312A tuple consists of a number of values separated by commas, for instance::
313
314 >>> t = 12345, 54321, 'hello!'
315 >>> t[0]
316 12345
317 >>> t
318 (12345, 54321, 'hello!')
319 >>> # Tuples may be nested:
320 ... u = t, (1, 2, 3, 4, 5)
321 >>> u
322 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
323
324As you see, on output tuples are always enclosed in parentheses, so that nested
325tuples are interpreted correctly; they may be input with or without surrounding
326parentheses, although often parentheses are necessary anyway (if the tuple is
327part of a larger expression).
328
329Tuples have many uses. For example: (x, y) coordinate pairs, employee records
330from a database, etc. Tuples, like strings, are immutable: it is not possible
331to assign to the individual items of a tuple (you can simulate much of the same
332effect with slicing and concatenation, though). It is also possible to create
333tuples which contain mutable objects, such as lists.
334
335A special problem is the construction of tuples containing 0 or 1 items: the
336syntax has some extra quirks to accommodate these. Empty tuples are constructed
337by an empty pair of parentheses; a tuple with one item is constructed by
338following a value with a comma (it is not sufficient to enclose a single value
339in parentheses). Ugly, but effective. For example::
340
341 >>> empty = ()
342 >>> singleton = 'hello', # <-- note trailing comma
343 >>> len(empty)
344 0
345 >>> len(singleton)
346 1
347 >>> singleton
348 ('hello',)
349
350The statement ``t = 12345, 54321, 'hello!'`` is an example of *tuple packing*:
351the values ``12345``, ``54321`` and ``'hello!'`` are packed together in a tuple.
352The reverse operation is also possible::
353
354 >>> x, y, z = t
355
Benjamin Petersond23f8222009-04-05 19:13:16 +0000356This is called, appropriately enough, *sequence unpacking* and works for any
Georg Brandl7ae90dd2009-06-08 18:59:09 +0000357sequence on the right-hand side. Sequence unpacking requires that there are as
358many variables on the left side of the equals sign as there are elements in the
Benjamin Petersond23f8222009-04-05 19:13:16 +0000359sequence. Note that multiple assignment is really just a combination of tuple
360packing and sequence unpacking.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000361
362.. XXX Add a bit on the difference between tuples and lists.
363
364
Georg Brandl116aa622007-08-15 14:28:22 +0000365.. _tut-sets:
366
367Sets
368====
369
370Python also includes a data type for *sets*. A set is an unordered collection
371with no duplicate elements. Basic uses include membership testing and
372eliminating duplicate entries. Set objects also support mathematical operations
373like union, intersection, difference, and symmetric difference.
374
Georg Brandl10e0e302009-06-08 20:25:55 +0000375Curly braces or the :func:`set` function can be use to create sets. Note: To
376create an empty set you have to use ``set()``, not ``{}``; the latter creates an
377empty dictionary, a data structure that we discuss in the next section.
Guido van Rossum0616b792007-08-31 03:25:11 +0000378
Georg Brandl116aa622007-08-15 14:28:22 +0000379Here is a brief demonstration::
380
Guido van Rossum0616b792007-08-31 03:25:11 +0000381 >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
382 >>> print(basket)
Georg Brandl2080ea52008-12-07 15:17:53 +0000383 {'orange', 'banana', 'pear', 'apple'}
Guido van Rossum0616b792007-08-31 03:25:11 +0000384 >>> fruit = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
Georg Brandl116aa622007-08-15 14:28:22 +0000385 >>> fruit = set(basket) # create a set without duplicates
386 >>> fruit
Guido van Rossum0616b792007-08-31 03:25:11 +0000387 {'orange', 'pear', 'apple', 'banana'}
Georg Brandlf6945182008-02-01 11:56:49 +0000388 >>> fruit = {'orange', 'apple'} # {} syntax is equivalent to [] for lists
389 >>> fruit
390 {'orange', 'apple'}
Georg Brandl116aa622007-08-15 14:28:22 +0000391 >>> 'orange' in fruit # fast membership testing
392 True
393 >>> 'crabgrass' in fruit
394 False
395
396 >>> # Demonstrate set operations on unique letters from two words
397 ...
398 >>> a = set('abracadabra')
399 >>> b = set('alacazam')
400 >>> a # unique letters in a
Guido van Rossum0616b792007-08-31 03:25:11 +0000401 {'a', 'r', 'b', 'c', 'd'}
Georg Brandl116aa622007-08-15 14:28:22 +0000402 >>> a - b # letters in a but not in b
Guido van Rossum0616b792007-08-31 03:25:11 +0000403 {'r', 'd', 'b'}
Georg Brandl116aa622007-08-15 14:28:22 +0000404 >>> a | b # letters in either a or b
Guido van Rossum0616b792007-08-31 03:25:11 +0000405 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
Georg Brandl116aa622007-08-15 14:28:22 +0000406 >>> a & b # letters in both a and b
Guido van Rossum0616b792007-08-31 03:25:11 +0000407 {'a', 'c'}
Georg Brandl116aa622007-08-15 14:28:22 +0000408 >>> a ^ b # letters in a or b but not both
Guido van Rossum0616b792007-08-31 03:25:11 +0000409 {'r', 'd', 'b', 'm', 'z', 'l'}
410
Georg Brandlfc11f272009-06-16 19:22:10 +0000411Like :ref:`for lists <tut-listcomps>`, there is a set comprehension syntax::
Georg Brandlf6945182008-02-01 11:56:49 +0000412
413 >>> a = {x for x in 'abracadabra' if x not in 'abc'}
414 >>> a
415 {'r', 'd'}
Guido van Rossum0616b792007-08-31 03:25:11 +0000416
Georg Brandl116aa622007-08-15 14:28:22 +0000417
418
419.. _tut-dictionaries:
420
421Dictionaries
422============
423
424Another useful data type built into Python is the *dictionary* (see
425:ref:`typesmapping`). Dictionaries are sometimes found in other languages as
426"associative memories" or "associative arrays". Unlike sequences, which are
427indexed by a range of numbers, dictionaries are indexed by *keys*, which can be
428any immutable type; strings and numbers can always be keys. Tuples can be used
429as keys if they contain only strings, numbers, or tuples; if a tuple contains
430any mutable object either directly or indirectly, it cannot be used as a key.
431You can't use lists as keys, since lists can be modified in place using index
432assignments, slice assignments, or methods like :meth:`append` and
433:meth:`extend`.
434
435It is best to think of a dictionary as an unordered set of *key: value* pairs,
436with the requirement that the keys are unique (within one dictionary). A pair of
437braces creates an empty dictionary: ``{}``. Placing a comma-separated list of
438key:value pairs within the braces adds initial key:value pairs to the
439dictionary; this is also the way dictionaries are written on output.
440
441The main operations on a dictionary are storing a value with some key and
442extracting the value given the key. It is also possible to delete a key:value
443pair with ``del``. If you store using a key that is already in use, the old
444value associated with that key is forgotten. It is an error to extract a value
445using a non-existent key.
446
Georg Brandlabffe712008-12-15 08:28:37 +0000447Performing ``list(d.keys())`` on a dictionary returns a list of all the keys
Georg Brandlfc11f272009-06-16 19:22:10 +0000448used in the dictionary, in arbitrary order (if you want it sorted, just use
449``sorted(d.keys())`` instead). [1]_ To check whether a single key is in the
450dictionary, use the :keyword:`in` keyword.
Georg Brandl116aa622007-08-15 14:28:22 +0000451
452Here is a small example using a dictionary::
453
454 >>> tel = {'jack': 4098, 'sape': 4139}
455 >>> tel['guido'] = 4127
456 >>> tel
457 {'sape': 4139, 'guido': 4127, 'jack': 4098}
458 >>> tel['jack']
459 4098
460 >>> del tel['sape']
461 >>> tel['irv'] = 4127
462 >>> tel
463 {'guido': 4127, 'irv': 4127, 'jack': 4098}
Neal Norwitze0906d12007-08-31 03:46:28 +0000464 >>> list(tel.keys())
Georg Brandlabffe712008-12-15 08:28:37 +0000465 ['irv', 'guido', 'jack']
466 >>> sorted(tel.keys())
Georg Brandl116aa622007-08-15 14:28:22 +0000467 ['guido', 'irv', 'jack']
Georg Brandl116aa622007-08-15 14:28:22 +0000468 >>> 'guido' in tel
469 True
Neal Norwitze0906d12007-08-31 03:46:28 +0000470 >>> 'jack' not in tel
471 False
Georg Brandl116aa622007-08-15 14:28:22 +0000472
Georg Brandlfc11f272009-06-16 19:22:10 +0000473The :func:`dict` constructor builds dictionaries directly from sequences of
Raymond Hettinger8699aea2009-06-16 20:49:30 +0000474key-value pairs::
Georg Brandl116aa622007-08-15 14:28:22 +0000475
476 >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
477 {'sape': 4139, 'jack': 4098, 'guido': 4127}
Georg Brandl116aa622007-08-15 14:28:22 +0000478
Georg Brandlf6945182008-02-01 11:56:49 +0000479In addition, dict comprehensions can be used to create dictionaries from
480arbitrary key and value expressions::
481
482 >>> {x: x**2 for x in (2, 4, 6)}
483 {2: 4, 4: 16, 6: 36}
Georg Brandl116aa622007-08-15 14:28:22 +0000484
485When the keys are simple strings, it is sometimes easier to specify pairs using
486keyword arguments::
487
488 >>> dict(sape=4139, guido=4127, jack=4098)
489 {'sape': 4139, 'jack': 4098, 'guido': 4127}
490
491
492.. _tut-loopidioms:
493
494Looping Techniques
495==================
496
497When looping through dictionaries, the key and corresponding value can be
Neal Norwitze0906d12007-08-31 03:46:28 +0000498retrieved at the same time using the :meth:`items` method. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000499
500 >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
Neal Norwitze0906d12007-08-31 03:46:28 +0000501 >>> for k, v in knights.items():
Guido van Rossum0616b792007-08-31 03:25:11 +0000502 ... print(k, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000503 ...
504 gallahad the pure
505 robin the brave
506
507When looping through a sequence, the position index and corresponding value can
508be retrieved at the same time using the :func:`enumerate` function. ::
509
510 >>> for i, v in enumerate(['tic', 'tac', 'toe']):
Guido van Rossum0616b792007-08-31 03:25:11 +0000511 ... print(i, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000512 ...
513 0 tic
514 1 tac
515 2 toe
516
517To loop over two or more sequences at the same time, the entries can be paired
518with the :func:`zip` function. ::
519
520 >>> questions = ['name', 'quest', 'favorite color']
521 >>> answers = ['lancelot', 'the holy grail', 'blue']
522 >>> for q, a in zip(questions, answers):
Benjamin Petersone6f00632008-05-26 01:03:56 +0000523 ... print('What is your {0}? It is {1}.'.format(q, a))
Georg Brandl06788c92009-01-03 21:31:47 +0000524 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000525 What is your name? It is lancelot.
526 What is your quest? It is the holy grail.
527 What is your favorite color? It is blue.
528
529To loop over a sequence in reverse, first specify the sequence in a forward
530direction and then call the :func:`reversed` function. ::
531
Georg Brandle4ac7502007-09-03 07:10:24 +0000532 >>> for i in reversed(range(1, 10, 2)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000533 ... print(i)
Georg Brandl116aa622007-08-15 14:28:22 +0000534 ...
535 9
536 7
537 5
538 3
539 1
540
541To loop over a sequence in sorted order, use the :func:`sorted` function which
542returns a new sorted list while leaving the source unaltered. ::
543
544 >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
545 >>> for f in sorted(set(basket)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000546 ... print(f)
Georg Brandl06788c92009-01-03 21:31:47 +0000547 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000548 apple
549 banana
550 orange
551 pear
552
553
554.. _tut-conditions:
555
556More on Conditions
557==================
558
559The conditions used in ``while`` and ``if`` statements can contain any
560operators, not just comparisons.
561
562The comparison operators ``in`` and ``not in`` check whether a value occurs
563(does not occur) in a sequence. The operators ``is`` and ``is not`` compare
564whether two objects are really the same object; this only matters for mutable
565objects like lists. All comparison operators have the same priority, which is
566lower than that of all numerical operators.
567
568Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is
569less than ``b`` and moreover ``b`` equals ``c``.
570
571Comparisons may be combined using the Boolean operators ``and`` and ``or``, and
572the outcome of a comparison (or of any other Boolean expression) may be negated
573with ``not``. These have lower priorities than comparison operators; between
574them, ``not`` has the highest priority and ``or`` the lowest, so that ``A and
575not B or C`` is equivalent to ``(A and (not B)) or C``. As always, parentheses
576can be used to express the desired composition.
577
578The Boolean operators ``and`` and ``or`` are so-called *short-circuit*
579operators: their arguments are evaluated from left to right, and evaluation
580stops as soon as the outcome is determined. For example, if ``A`` and ``C`` are
581true but ``B`` is false, ``A and B and C`` does not evaluate the expression
582``C``. When used as a general value and not as a Boolean, the return value of a
583short-circuit operator is the last evaluated argument.
584
585It is possible to assign the result of a comparison or other Boolean expression
586to a variable. For example, ::
587
588 >>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
589 >>> non_null = string1 or string2 or string3
590 >>> non_null
591 'Trondheim'
592
593Note that in Python, unlike C, assignment cannot occur inside expressions. C
594programmers may grumble about this, but it avoids a common class of problems
595encountered in C programs: typing ``=`` in an expression when ``==`` was
596intended.
597
598
599.. _tut-comparing:
600
601Comparing Sequences and Other Types
602===================================
603
604Sequence objects may be compared to other objects with the same sequence type.
605The comparison uses *lexicographical* ordering: first the first two items are
606compared, and if they differ this determines the outcome of the comparison; if
607they are equal, the next two items are compared, and so on, until either
608sequence is exhausted. If two items to be compared are themselves sequences of
609the same type, the lexicographical comparison is carried out recursively. If
610all items of two sequences compare equal, the sequences are considered equal.
611If one sequence is an initial sub-sequence of the other, the shorter sequence is
Georg Brandlfc11f272009-06-16 19:22:10 +0000612the smaller (lesser) one. Lexicographical ordering for strings uses the Unicode
613codepoint number to order individual characters. Some examples of comparisons
614between sequences of the same type::
Georg Brandl116aa622007-08-15 14:28:22 +0000615
616 (1, 2, 3) < (1, 2, 4)
617 [1, 2, 3] < [1, 2, 4]
618 'ABC' < 'C' < 'Pascal' < 'Python'
619 (1, 2, 3, 4) < (1, 2, 4)
620 (1, 2) < (1, 2, -1)
621 (1, 2, 3) == (1.0, 2.0, 3.0)
622 (1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
623
Georg Brandl9f2c39a2007-10-08 14:08:36 +0000624Note that comparing objects of different types with ``<`` or ``>`` is legal
625provided that the objects have appropriate comparison methods. For example,
626mixed numeric types are compared according to their numeric value, so 0 equals
6270.0, etc. Otherwise, rather than providing an arbitrary ordering, the
628interpreter will raise a :exc:`TypeError` exception.
Georg Brandlfc11f272009-06-16 19:22:10 +0000629
630
631.. rubric:: Footnotes
632
633.. [1] Calling ``d.keys()`` will return a :dfn:`dictionary view` object. It
634 supports operations like membership test and iteration, but its contents
635 are not independent of the original dictionary -- it is only a *view*.