blob: e8509ebe93cc3249dd93d6ebbc69114daa2da893 [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
156
Georg Brandl116aa622007-08-15 14:28:22 +0000157List Comprehensions
158-------------------
159
Guido van Rossum0616b792007-08-31 03:25:11 +0000160List comprehensions provide a concise way to create lists from sequences.
161Common applications are to make lists where each element is the result of
162some operations applied to each member of the sequence, or to create a
163subsequence of those elements that satisfy a certain condition.
164
165
Georg Brandl116aa622007-08-15 14:28:22 +0000166Each list comprehension consists of an expression followed by a :keyword:`for`
167clause, then zero or more :keyword:`for` or :keyword:`if` clauses. The result
168will be a list resulting from evaluating the expression in the context of the
169:keyword:`for` and :keyword:`if` clauses which follow it. If the expression
Guido van Rossum0616b792007-08-31 03:25:11 +0000170would evaluate to a tuple, it must be parenthesized.
171
172Here we take a list of numbers and return a list of three times each number::
173
174 >>> vec = [2, 4, 6]
175 >>> [3*x for x in vec]
176 [6, 12, 18]
177
178Now we get a little fancier::
179
Georg Brandle4ac7502007-09-03 07:10:24 +0000180 >>> [[x, x**2] for x in vec]
Guido van Rossum0616b792007-08-31 03:25:11 +0000181 [[2, 4], [4, 16], [6, 36]]
182
183Here we apply a method call to each item in a sequence::
Georg Brandl116aa622007-08-15 14:28:22 +0000184
185 >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
186 >>> [weapon.strip() for weapon in freshfruit]
187 ['banana', 'loganberry', 'passion fruit']
Guido van Rossum0616b792007-08-31 03:25:11 +0000188
Georg Brandle4ac7502007-09-03 07:10:24 +0000189Using the :keyword:`if` clause we can filter the stream::
Guido van Rossum0616b792007-08-31 03:25:11 +0000190
Georg Brandl116aa622007-08-15 14:28:22 +0000191 >>> [3*x for x in vec if x > 3]
192 [12, 18]
193 >>> [3*x for x in vec if x < 2]
194 []
Guido van Rossum0616b792007-08-31 03:25:11 +0000195
196Tuples can often be created without their parentheses, but not here::
197
Georg Brandl116aa622007-08-15 14:28:22 +0000198 >>> [x, x**2 for x in vec] # error - parens required for tuples
199 File "<stdin>", line 1, in ?
200 [x, x**2 for x in vec]
201 ^
202 SyntaxError: invalid syntax
203 >>> [(x, x**2) for x in vec]
204 [(2, 4), (4, 16), (6, 36)]
Guido van Rossum0616b792007-08-31 03:25:11 +0000205
Georg Brandle4ac7502007-09-03 07:10:24 +0000206Here are some nested for loops and other fancy behavior::
Guido van Rossum0616b792007-08-31 03:25:11 +0000207
Georg Brandl116aa622007-08-15 14:28:22 +0000208 >>> vec1 = [2, 4, 6]
209 >>> vec2 = [4, 3, -9]
210 >>> [x*y for x in vec1 for y in vec2]
211 [8, 6, -18, 16, 12, -36, 24, 18, -54]
212 >>> [x+y for x in vec1 for y in vec2]
213 [6, 5, -7, 8, 7, -5, 10, 9, -3]
214 >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
215 [8, 12, -54]
216
Guido van Rossum0616b792007-08-31 03:25:11 +0000217List comprehensions can be applied to complex expressions and nested functions::
Georg Brandl116aa622007-08-15 14:28:22 +0000218
Georg Brandlf6945182008-02-01 11:56:49 +0000219 >>> [str(round(355/113, i)) for i in range(1, 6)]
Georg Brandl116aa622007-08-15 14:28:22 +0000220 ['3.1', '3.14', '3.142', '3.1416', '3.14159']
221
222
Christian Heimes0449f632007-12-15 01:27:15 +0000223Nested List Comprehensions
224--------------------------
225
226If you've got the stomach for it, list comprehensions can be nested. They are a
227powerful tool but -- like all powerful tools -- they need to be used carefully,
228if at all.
229
230Consider the following example of a 3x3 matrix held as a list containing three
231lists, one list per row::
232
233 >>> mat = [
234 ... [1, 2, 3],
235 ... [4, 5, 6],
236 ... [7, 8, 9],
237 ... ]
238
239Now, if you wanted to swap rows and columns, you could use a list
240comprehension::
241
Neal Norwitz752abd02008-05-13 04:55:24 +0000242 >>> print([[row[i] for row in mat] for i in [0, 1, 2]])
Christian Heimes0449f632007-12-15 01:27:15 +0000243 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
244
245Special care has to be taken for the *nested* list comprehension:
246
247 To avoid apprehension when nesting list comprehensions, read from right to
248 left.
249
250A more verbose version of this snippet shows the flow explicitly::
251
252 for i in [0, 1, 2]:
253 for row in mat:
Neal Norwitz752abd02008-05-13 04:55:24 +0000254 print(row[i], end="")
Benjamin Petersonbfc644b2008-07-05 23:39:56 +0000255 print()
Christian Heimes0449f632007-12-15 01:27:15 +0000256
257In real world, you should prefer builtin functions to complex flow statements.
258The :func:`zip` function would do a great job for this use case::
259
Georg Brandl409c9d72008-08-08 06:44:14 +0000260 >>> list(zip(*mat))
Christian Heimes0449f632007-12-15 01:27:15 +0000261 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
262
263See :ref:`tut-unpacking-arguments` for details on the asterisk in this line.
264
Georg Brandl116aa622007-08-15 14:28:22 +0000265.. _tut-del:
266
267The :keyword:`del` statement
268============================
269
270There is a way to remove an item from a list given its index instead of its
271value: the :keyword:`del` statement. This differs from the :meth:`pop` method
272which returns a value. The :keyword:`del` statement can also be used to remove
273slices from a list or clear the entire list (which we did earlier by assignment
274of an empty list to the slice). For example::
275
276 >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
277 >>> del a[0]
278 >>> a
279 [1, 66.25, 333, 333, 1234.5]
280 >>> del a[2:4]
281 >>> a
282 [1, 66.25, 1234.5]
283 >>> del a[:]
284 >>> a
285 []
286
287:keyword:`del` can also be used to delete entire variables::
288
289 >>> del a
290
291Referencing the name ``a`` hereafter is an error (at least until another value
292is assigned to it). We'll find other uses for :keyword:`del` later.
293
294
Georg Brandl5d955ed2008-09-13 17:18:21 +0000295.. _tut-tuples:
Georg Brandl116aa622007-08-15 14:28:22 +0000296
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000297Tuples and Sequences
298====================
299
300We saw that lists and strings have many common properties, such as indexing and
301slicing operations. They are two examples of *sequence* data types (see
302:ref:`typesseq`). Since Python is an evolving language, other sequence data
303types may be added. There is also another standard sequence data type: the
304*tuple*.
305
306A tuple consists of a number of values separated by commas, for instance::
307
308 >>> t = 12345, 54321, 'hello!'
309 >>> t[0]
310 12345
311 >>> t
312 (12345, 54321, 'hello!')
313 >>> # Tuples may be nested:
314 ... u = t, (1, 2, 3, 4, 5)
315 >>> u
316 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
317
318As you see, on output tuples are always enclosed in parentheses, so that nested
319tuples are interpreted correctly; they may be input with or without surrounding
320parentheses, although often parentheses are necessary anyway (if the tuple is
321part of a larger expression).
322
323Tuples have many uses. For example: (x, y) coordinate pairs, employee records
324from a database, etc. Tuples, like strings, are immutable: it is not possible
325to assign to the individual items of a tuple (you can simulate much of the same
326effect with slicing and concatenation, though). It is also possible to create
327tuples which contain mutable objects, such as lists.
328
329A special problem is the construction of tuples containing 0 or 1 items: the
330syntax has some extra quirks to accommodate these. Empty tuples are constructed
331by an empty pair of parentheses; a tuple with one item is constructed by
332following a value with a comma (it is not sufficient to enclose a single value
333in parentheses). Ugly, but effective. For example::
334
335 >>> empty = ()
336 >>> singleton = 'hello', # <-- note trailing comma
337 >>> len(empty)
338 0
339 >>> len(singleton)
340 1
341 >>> singleton
342 ('hello',)
343
344The statement ``t = 12345, 54321, 'hello!'`` is an example of *tuple packing*:
345the values ``12345``, ``54321`` and ``'hello!'`` are packed together in a tuple.
346The reverse operation is also possible::
347
348 >>> x, y, z = t
349
350This is called, appropriately enough, *sequence unpacking*. Sequence unpacking
351requires the list of variables on the left to have the same number of elements
352as the length of the sequence. Note that multiple assignment is really just a
353combination of tuple packing and sequence unpacking!
354
355There is a small bit of asymmetry here: packing multiple values always creates
356a tuple, and unpacking works for any sequence.
357
358.. XXX Add a bit on the difference between tuples and lists.
359
360
Georg Brandl116aa622007-08-15 14:28:22 +0000361.. _tut-sets:
362
363Sets
364====
365
366Python also includes a data type for *sets*. A set is an unordered collection
367with no duplicate elements. Basic uses include membership testing and
368eliminating duplicate entries. Set objects also support mathematical operations
369like union, intersection, difference, and symmetric difference.
370
Guido van Rossum0616b792007-08-31 03:25:11 +0000371Curly braces or the :func:`set` function can be use to create sets. Note:
372To create an empty set you have to use set(), not {}; the latter creates
373an empty dictionary, a data structure that we discuss in the next section.
374
Georg Brandl116aa622007-08-15 14:28:22 +0000375Here is a brief demonstration::
376
Guido van Rossum0616b792007-08-31 03:25:11 +0000377 >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
378 >>> print(basket)
379 {'orange', 'bananna', 'pear', 'apple'}
380 >>> fruit = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
Georg Brandl116aa622007-08-15 14:28:22 +0000381 >>> fruit = set(basket) # create a set without duplicates
382 >>> fruit
Guido van Rossum0616b792007-08-31 03:25:11 +0000383 {'orange', 'pear', 'apple', 'banana'}
Georg Brandlf6945182008-02-01 11:56:49 +0000384 >>> fruit = {'orange', 'apple'} # {} syntax is equivalent to [] for lists
385 >>> fruit
386 {'orange', 'apple'}
Georg Brandl116aa622007-08-15 14:28:22 +0000387 >>> 'orange' in fruit # fast membership testing
388 True
389 >>> 'crabgrass' in fruit
390 False
391
392 >>> # Demonstrate set operations on unique letters from two words
393 ...
394 >>> a = set('abracadabra')
395 >>> b = set('alacazam')
396 >>> a # unique letters in a
Guido van Rossum0616b792007-08-31 03:25:11 +0000397 {'a', 'r', 'b', 'c', 'd'}
Georg Brandl116aa622007-08-15 14:28:22 +0000398 >>> a - b # letters in a but not in b
Guido van Rossum0616b792007-08-31 03:25:11 +0000399 {'r', 'd', 'b'}
Georg Brandl116aa622007-08-15 14:28:22 +0000400 >>> a | b # letters in either a or b
Guido van Rossum0616b792007-08-31 03:25:11 +0000401 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
Georg Brandl116aa622007-08-15 14:28:22 +0000402 >>> a & b # letters in both a and b
Guido van Rossum0616b792007-08-31 03:25:11 +0000403 {'a', 'c'}
Georg Brandl116aa622007-08-15 14:28:22 +0000404 >>> a ^ b # letters in a or b but not both
Guido van Rossum0616b792007-08-31 03:25:11 +0000405 {'r', 'd', 'b', 'm', 'z', 'l'}
406
Georg Brandlf6945182008-02-01 11:56:49 +0000407Like for lists, there is a set comprehension syntax::
408
409 >>> a = {x for x in 'abracadabra' if x not in 'abc'}
410 >>> a
411 {'r', 'd'}
Guido van Rossum0616b792007-08-31 03:25:11 +0000412
Georg Brandl116aa622007-08-15 14:28:22 +0000413
414
415.. _tut-dictionaries:
416
417Dictionaries
418============
419
420Another useful data type built into Python is the *dictionary* (see
421:ref:`typesmapping`). Dictionaries are sometimes found in other languages as
422"associative memories" or "associative arrays". Unlike sequences, which are
423indexed by a range of numbers, dictionaries are indexed by *keys*, which can be
424any immutable type; strings and numbers can always be keys. Tuples can be used
425as keys if they contain only strings, numbers, or tuples; if a tuple contains
426any mutable object either directly or indirectly, it cannot be used as a key.
427You can't use lists as keys, since lists can be modified in place using index
428assignments, slice assignments, or methods like :meth:`append` and
429:meth:`extend`.
430
431It is best to think of a dictionary as an unordered set of *key: value* pairs,
432with the requirement that the keys are unique (within one dictionary). A pair of
433braces creates an empty dictionary: ``{}``. Placing a comma-separated list of
434key:value pairs within the braces adds initial key:value pairs to the
435dictionary; this is also the way dictionaries are written on output.
436
437The main operations on a dictionary are storing a value with some key and
438extracting the value given the key. It is also possible to delete a key:value
439pair with ``del``. If you store using a key that is already in use, the old
440value associated with that key is forgotten. It is an error to extract a value
441using a non-existent key.
442
443The :meth:`keys` method of a dictionary object returns a list of all the keys
444used in the dictionary, in arbitrary order (if you want it sorted, just apply
445the :meth:`sort` method to the list of keys). To check whether a single key is
Collin Winter19ab2bd2007-09-10 00:20:46 +0000446in the dictionary, use the :keyword:`in` keyword.
Georg Brandl116aa622007-08-15 14:28:22 +0000447
448Here is a small example using a dictionary::
449
450 >>> tel = {'jack': 4098, 'sape': 4139}
451 >>> tel['guido'] = 4127
452 >>> tel
453 {'sape': 4139, 'guido': 4127, 'jack': 4098}
454 >>> tel['jack']
455 4098
456 >>> del tel['sape']
457 >>> tel['irv'] = 4127
458 >>> tel
459 {'guido': 4127, 'irv': 4127, 'jack': 4098}
Neal Norwitze0906d12007-08-31 03:46:28 +0000460 >>> list(tel.keys())
Georg Brandl116aa622007-08-15 14:28:22 +0000461 ['guido', 'irv', 'jack']
Georg Brandl116aa622007-08-15 14:28:22 +0000462 >>> 'guido' in tel
463 True
Neal Norwitze0906d12007-08-31 03:46:28 +0000464 >>> 'jack' not in tel
465 False
Georg Brandl116aa622007-08-15 14:28:22 +0000466
467The :func:`dict` constructor builds dictionaries directly from lists of
468key-value pairs stored as tuples. When the pairs form a pattern, list
469comprehensions can compactly specify the key-value list. ::
470
471 >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
472 {'sape': 4139, 'jack': 4098, 'guido': 4127}
Georg Brandl116aa622007-08-15 14:28:22 +0000473
Georg Brandlf6945182008-02-01 11:56:49 +0000474In addition, dict comprehensions can be used to create dictionaries from
475arbitrary key and value expressions::
476
477 >>> {x: x**2 for x in (2, 4, 6)}
478 {2: 4, 4: 16, 6: 36}
Georg Brandl116aa622007-08-15 14:28:22 +0000479
480When the keys are simple strings, it is sometimes easier to specify pairs using
481keyword arguments::
482
483 >>> dict(sape=4139, guido=4127, jack=4098)
484 {'sape': 4139, 'jack': 4098, 'guido': 4127}
485
486
Georg Brandlf6945182008-02-01 11:56:49 +0000487.. XXX Find out the right way to do these DUBOIS
Georg Brandl116aa622007-08-15 14:28:22 +0000488.. _tut-loopidioms:
489
490Looping Techniques
491==================
492
493When looping through dictionaries, the key and corresponding value can be
Neal Norwitze0906d12007-08-31 03:46:28 +0000494retrieved at the same time using the :meth:`items` method. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000495
496 >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
Neal Norwitze0906d12007-08-31 03:46:28 +0000497 >>> for k, v in knights.items():
Guido van Rossum0616b792007-08-31 03:25:11 +0000498 ... print(k, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000499 ...
500 gallahad the pure
501 robin the brave
502
503When looping through a sequence, the position index and corresponding value can
504be retrieved at the same time using the :func:`enumerate` function. ::
505
506 >>> for i, v in enumerate(['tic', 'tac', 'toe']):
Guido van Rossum0616b792007-08-31 03:25:11 +0000507 ... print(i, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000508 ...
509 0 tic
510 1 tac
511 2 toe
512
513To loop over two or more sequences at the same time, the entries can be paired
514with the :func:`zip` function. ::
515
516 >>> questions = ['name', 'quest', 'favorite color']
517 >>> answers = ['lancelot', 'the holy grail', 'blue']
518 >>> for q, a in zip(questions, answers):
Benjamin Petersone6f00632008-05-26 01:03:56 +0000519 ... print('What is your {0}? It is {1}.'.format(q, a))
Georg Brandl116aa622007-08-15 14:28:22 +0000520 ...
521 What is your name? It is lancelot.
522 What is your quest? It is the holy grail.
523 What is your favorite color? It is blue.
524
525To loop over a sequence in reverse, first specify the sequence in a forward
526direction and then call the :func:`reversed` function. ::
527
Georg Brandle4ac7502007-09-03 07:10:24 +0000528 >>> for i in reversed(range(1, 10, 2)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000529 ... print(i)
Georg Brandl116aa622007-08-15 14:28:22 +0000530 ...
531 9
532 7
533 5
534 3
535 1
536
537To loop over a sequence in sorted order, use the :func:`sorted` function which
538returns a new sorted list while leaving the source unaltered. ::
539
540 >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
541 >>> for f in sorted(set(basket)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000542 ... print(f)
Georg Brandl116aa622007-08-15 14:28:22 +0000543 ...
544 apple
545 banana
546 orange
547 pear
548
549
550.. _tut-conditions:
551
552More on Conditions
553==================
554
555The conditions used in ``while`` and ``if`` statements can contain any
556operators, not just comparisons.
557
558The comparison operators ``in`` and ``not in`` check whether a value occurs
559(does not occur) in a sequence. The operators ``is`` and ``is not`` compare
560whether two objects are really the same object; this only matters for mutable
561objects like lists. All comparison operators have the same priority, which is
562lower than that of all numerical operators.
563
564Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is
565less than ``b`` and moreover ``b`` equals ``c``.
566
567Comparisons may be combined using the Boolean operators ``and`` and ``or``, and
568the outcome of a comparison (or of any other Boolean expression) may be negated
569with ``not``. These have lower priorities than comparison operators; between
570them, ``not`` has the highest priority and ``or`` the lowest, so that ``A and
571not B or C`` is equivalent to ``(A and (not B)) or C``. As always, parentheses
572can be used to express the desired composition.
573
574The Boolean operators ``and`` and ``or`` are so-called *short-circuit*
575operators: their arguments are evaluated from left to right, and evaluation
576stops as soon as the outcome is determined. For example, if ``A`` and ``C`` are
577true but ``B`` is false, ``A and B and C`` does not evaluate the expression
578``C``. When used as a general value and not as a Boolean, the return value of a
579short-circuit operator is the last evaluated argument.
580
581It is possible to assign the result of a comparison or other Boolean expression
582to a variable. For example, ::
583
584 >>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
585 >>> non_null = string1 or string2 or string3
586 >>> non_null
587 'Trondheim'
588
589Note that in Python, unlike C, assignment cannot occur inside expressions. C
590programmers may grumble about this, but it avoids a common class of problems
591encountered in C programs: typing ``=`` in an expression when ``==`` was
592intended.
593
594
595.. _tut-comparing:
596
597Comparing Sequences and Other Types
598===================================
599
600Sequence objects may be compared to other objects with the same sequence type.
601The comparison uses *lexicographical* ordering: first the first two items are
602compared, and if they differ this determines the outcome of the comparison; if
603they are equal, the next two items are compared, and so on, until either
604sequence is exhausted. If two items to be compared are themselves sequences of
605the same type, the lexicographical comparison is carried out recursively. If
606all items of two sequences compare equal, the sequences are considered equal.
607If one sequence is an initial sub-sequence of the other, the shorter sequence is
608the smaller (lesser) one. Lexicographical ordering for strings uses the ASCII
609ordering for individual characters. Some examples of comparisons between
610sequences of the same type::
611
612 (1, 2, 3) < (1, 2, 4)
613 [1, 2, 3] < [1, 2, 4]
614 'ABC' < 'C' < 'Pascal' < 'Python'
615 (1, 2, 3, 4) < (1, 2, 4)
616 (1, 2) < (1, 2, -1)
617 (1, 2, 3) == (1.0, 2.0, 3.0)
618 (1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
619
Georg Brandl9f2c39a2007-10-08 14:08:36 +0000620Note that comparing objects of different types with ``<`` or ``>`` is legal
621provided that the objects have appropriate comparison methods. For example,
622mixed numeric types are compared according to their numeric value, so 0 equals
6230.0, etc. Otherwise, rather than providing an arbitrary ordering, the
624interpreter will raise a :exc:`TypeError` exception.