1 .. _tut-structures: 2 3 *************** 4 Data Structures 5 *************** 6 7 This chapter describes some things you've learned about already in more detail, 8 and adds some new things as well. 9 10 11 .. _tut-morelists: 12 13 More on Lists 14 ============= 15 16 The list data type has some more methods. Here are all of the methods of list 17 objects: 18 19 20 .. method:: list.append(x) 21 :noindex: 22 23 Add an item to the end of the list; equivalent to ``a[len(a):] = [x]``. 24 25 26 .. method:: list.extend(L) 27 :noindex: 28 29 Extend the list by appending all the items in the given list; equivalent to 30 ``a[len(a):] = L``. 31 32 33 .. method:: list.insert(i, x) 34 :noindex: 35 36 Insert an item at a given position. The first argument is the index of the 37 element before which to insert, so ``a.insert(0, x)`` inserts at the front of 38 the list, and ``a.insert(len(a), x)`` is equivalent to ``a.append(x)``. 39 40 41 .. method:: list.remove(x) 42 :noindex: 43 44 Remove the first item from the list whose value is *x*. It is an error if there 45 is no such item. 46 47 48 .. method:: list.pop([i]) 49 :noindex: 50 51 Remove the item at the given position in the list, and return it. If no index 52 is specified, ``a.pop()`` removes and returns the last item in the list. (The 53 square brackets around the *i* in the method signature denote that the parameter 54 is optional, not that you should type square brackets at that position. You 55 will see this notation frequently in the Python Library Reference.) 56 57 58 .. method:: list.index(x) 59 :noindex: 60 61 Return the index in the list of the first item whose value is *x*. It is an 62 error if there is no such item. 63 64 65 .. method:: list.count(x) 66 :noindex: 67 68 Return the number of times *x* appears in the list. 69 70 71 .. method:: list.sort(cmp=None, key=None, reverse=False) 72 :noindex: 73 74 Sort the items of the list in place (the arguments can be used for sort 75 customization, see :func:`sorted` for their explanation). 76 77 78 .. method:: list.reverse() 79 :noindex: 80 81 Reverse the elements of the list, in place. 82 83 An example that uses most of the list methods:: 84 85 >>> a = [66.25, 333, 333, 1, 1234.5] 86 >>> print a.count(333), a.count(66.25), a.count('x') 87 2 1 0 88 >>> a.insert(2, -1) 89 >>> a.append(333) 90 >>> a 91 [66.25, 333, -1, 333, 1, 1234.5, 333] 92 >>> a.index(333) 93 1 94 >>> a.remove(333) 95 >>> a 96 [66.25, -1, 333, 1, 1234.5, 333] 97 >>> a.reverse() 98 >>> a 99 [333, 1234.5, 1, 333, -1, 66.25] 100 >>> a.sort() 101 >>> a 102 [-1, 1, 66.25, 333, 333, 1234.5] 103 >>> a.pop() 104 1234.5 105 >>> a 106 [-1, 1, 66.25, 333, 333] 107 108 You might have noticed that methods like ``insert``, ``remove`` or ``sort`` that 109 only modify the list have no return value printed -- they return the default 110 ``None``. This is a design principle for all mutable data structures in 111 Python. 112 113 114 .. _tut-lists-as-stacks: 115 116 Using Lists as Stacks 117 --------------------- 118 119 .. sectionauthor:: Ka-Ping Yee <ping (a] lfw.org> 120 121 122 The list methods make it very easy to use a list as a stack, where the last 123 element added is the first element retrieved ("last-in, first-out"). To add an 124 item to the top of the stack, use :meth:`append`. To retrieve an item from the 125 top of the stack, use :meth:`pop` without an explicit index. For example:: 126 127 >>> stack = [3, 4, 5] 128 >>> stack.append(6) 129 >>> stack.append(7) 130 >>> stack 131 [3, 4, 5, 6, 7] 132 >>> stack.pop() 133 7 134 >>> stack 135 [3, 4, 5, 6] 136 >>> stack.pop() 137 6 138 >>> stack.pop() 139 5 140 >>> stack 141 [3, 4] 142 143 144 .. _tut-lists-as-queues: 145 146 Using Lists as Queues 147 --------------------- 148 149 .. sectionauthor:: Ka-Ping Yee <ping (a] lfw.org> 150 151 It is also possible to use a list as a queue, where the first element added is 152 the first element retrieved ("first-in, first-out"); however, lists are not 153 efficient for this purpose. While appends and pops from the end of list are 154 fast, doing inserts or pops from the beginning of a list is slow (because all 155 of the other elements have to be shifted by one). 156 157 To implement a queue, use :class:`collections.deque` which was designed to 158 have fast appends and pops from both ends. For example:: 159 160 >>> from collections import deque 161 >>> queue = deque(["Eric", "John", "Michael"]) 162 >>> queue.append("Terry") # Terry arrives 163 >>> queue.append("Graham") # Graham arrives 164 >>> queue.popleft() # The first to arrive now leaves 165 'Eric' 166 >>> queue.popleft() # The second to arrive now leaves 167 'John' 168 >>> queue # Remaining queue in order of arrival 169 deque(['Michael', 'Terry', 'Graham']) 170 171 172 .. _tut-functional: 173 174 Functional Programming Tools 175 ---------------------------- 176 177 There are three built-in functions that are very useful when used with lists: 178 :func:`filter`, :func:`map`, and :func:`reduce`. 179 180 ``filter(function, sequence)`` returns a sequence consisting of those items from 181 the sequence for which ``function(item)`` is true. If *sequence* is a 182 :class:`str`, :class:`unicode` or :class:`tuple`, the result will be of the 183 same type; otherwise, it is always a :class:`list`. For example, to compute a 184 sequence of numbers divisible by 3 or 5:: 185 186 >>> def f(x): return x % 3 == 0 or x % 5 == 0 187 ... 188 >>> filter(f, range(2, 25)) 189 [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24] 190 191 ``map(function, sequence)`` calls ``function(item)`` for each of the sequence's 192 items and returns a list of the return values. For example, to compute some 193 cubes:: 194 195 >>> def cube(x): return x*x*x 196 ... 197 >>> map(cube, range(1, 11)) 198 [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] 199 200 More than one sequence may be passed; the function must then have as many 201 arguments as there are sequences and is called with the corresponding item from 202 each sequence (or ``None`` if some sequence is shorter than another). For 203 example:: 204 205 >>> seq = range(8) 206 >>> def add(x, y): return x+y 207 ... 208 >>> map(add, seq, seq) 209 [0, 2, 4, 6, 8, 10, 12, 14] 210 211 ``reduce(function, sequence)`` returns a single value constructed by calling the 212 binary function *function* on the first two items of the sequence, then on the 213 result and the next item, and so on. For example, to compute the sum of the 214 numbers 1 through 10:: 215 216 >>> def add(x,y): return x+y 217 ... 218 >>> reduce(add, range(1, 11)) 219 55 220 221 If there's only one item in the sequence, its value is returned; if the sequence 222 is empty, an exception is raised. 223 224 A third argument can be passed to indicate the starting value. In this case the 225 starting value is returned for an empty sequence, and the function is first 226 applied to the starting value and the first sequence item, then to the result 227 and the next item, and so on. For example, :: 228 229 >>> def sum(seq): 230 ... def add(x,y): return x+y 231 ... return reduce(add, seq, 0) 232 ... 233 >>> sum(range(1, 11)) 234 55 235 >>> sum([]) 236 0 237 238 Don't use this example's definition of :func:`sum`: since summing numbers is 239 such a common need, a built-in function ``sum(sequence)`` is already provided, 240 and works exactly like this. 241 242 .. _tut-listcomps: 243 244 List Comprehensions 245 ------------------- 246 247 List comprehensions provide a concise way to create lists. 248 Common applications are to make new lists where each element is the result of 249 some operations applied to each member of another sequence or iterable, or to 250 create a subsequence of those elements that satisfy a certain condition. 251 252 For example, assume we want to create a list of squares, like:: 253 254 >>> squares = [] 255 >>> for x in range(10): 256 ... squares.append(x**2) 257 ... 258 >>> squares 259 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 260 261 We can obtain the same result with:: 262 263 squares = [x**2 for x in range(10)] 264 265 This is also equivalent to ``squares = map(lambda x: x**2, range(10))``, 266 but it's more concise and readable. 267 268 A list comprehension consists of brackets containing an expression followed 269 by a :keyword:`for` clause, then zero or more :keyword:`for` or :keyword:`if` 270 clauses. The result will be a new list resulting from evaluating the expression 271 in the context of the :keyword:`for` and :keyword:`if` clauses which follow it. 272 For example, this listcomp combines the elements of two lists if they are not 273 equal:: 274 275 >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] 276 [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] 277 278 and it's equivalent to: 279 280 >>> combs = [] 281 >>> for x in [1,2,3]: 282 ... for y in [3,1,4]: 283 ... if x != y: 284 ... combs.append((x, y)) 285 ... 286 >>> combs 287 [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] 288 289 Note how the order of the :keyword:`for` and :keyword:`if` statements is the 290 same in both these snippets. 291 292 If the expression is a tuple (e.g. the ``(x, y)`` in the previous example), 293 it must be parenthesized. :: 294 295 >>> vec = [-4, -2, 0, 2, 4] 296 >>> # create a new list with the values doubled 297 >>> [x*2 for x in vec] 298 [-8, -4, 0, 4, 8] 299 >>> # filter the list to exclude negative numbers 300 >>> [x for x in vec if x >= 0] 301 [0, 2, 4] 302 >>> # apply a function to all the elements 303 >>> [abs(x) for x in vec] 304 [4, 2, 0, 2, 4] 305 >>> # call a method on each element 306 >>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] 307 >>> [weapon.strip() for weapon in freshfruit] 308 ['banana', 'loganberry', 'passion fruit'] 309 >>> # create a list of 2-tuples like (number, square) 310 >>> [(x, x**2) for x in range(6)] 311 [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] 312 >>> # the tuple must be parenthesized, otherwise an error is raised 313 >>> [x, x**2 for x in range(6)] 314 File "<stdin>", line 1, in <module> 315 [x, x**2 for x in range(6)] 316 ^ 317 SyntaxError: invalid syntax 318 >>> # flatten a list using a listcomp with two 'for' 319 >>> vec = [[1,2,3], [4,5,6], [7,8,9]] 320 >>> [num for elem in vec for num in elem] 321 [1, 2, 3, 4, 5, 6, 7, 8, 9] 322 323 List comprehensions can contain complex expressions and nested functions:: 324 325 >>> from math import pi 326 >>> [str(round(pi, i)) for i in range(1, 6)] 327 ['3.1', '3.14', '3.142', '3.1416', '3.14159'] 328 329 330 Nested List Comprehensions 331 '''''''''''''''''''''''''' 332 333 The initial expression in a list comprehension can be any arbitrary expression, 334 including another list comprehension. 335 336 Consider the following example of a 3x4 matrix implemented as a list of 337 3 lists of length 4:: 338 339 >>> matrix = [ 340 ... [1, 2, 3, 4], 341 ... [5, 6, 7, 8], 342 ... [9, 10, 11, 12], 343 ... ] 344 345 The following list comprehension will transpose rows and columns:: 346 347 >>> [[row[i] for row in matrix] for i in range(4)] 348 [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 349 350 As we saw in the previous section, the nested listcomp is evaluated in 351 the context of the :keyword:`for` that follows it, so this example is 352 equivalent to:: 353 354 >>> transposed = [] 355 >>> for i in range(4): 356 ... transposed.append([row[i] for row in matrix]) 357 ... 358 >>> transposed 359 [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 360 361 which, in turn, is the same as:: 362 363 >>> transposed = [] 364 >>> for i in range(4): 365 ... # the following 3 lines implement the nested listcomp 366 ... transposed_row = [] 367 ... for row in matrix: 368 ... transposed_row.append(row[i]) 369 ... transposed.append(transposed_row) 370 ... 371 >>> transposed 372 [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 373 374 375 In the real world, you should prefer built-in functions to complex flow statements. 376 The :func:`zip` function would do a great job for this use case:: 377 378 >>> zip(*matrix) 379 [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)] 380 381 See :ref:`tut-unpacking-arguments` for details on the asterisk in this line. 382 383 .. _tut-del: 384 385 The :keyword:`del` statement 386 ============================ 387 388 There is a way to remove an item from a list given its index instead of its 389 value: the :keyword:`del` statement. This differs from the :meth:`pop` method 390 which returns a value. The :keyword:`del` statement can also be used to remove 391 slices from a list or clear the entire list (which we did earlier by assignment 392 of an empty list to the slice). For example:: 393 394 >>> a = [-1, 1, 66.25, 333, 333, 1234.5] 395 >>> del a[0] 396 >>> a 397 [1, 66.25, 333, 333, 1234.5] 398 >>> del a[2:4] 399 >>> a 400 [1, 66.25, 1234.5] 401 >>> del a[:] 402 >>> a 403 [] 404 405 :keyword:`del` can also be used to delete entire variables:: 406 407 >>> del a 408 409 Referencing the name ``a`` hereafter is an error (at least until another value 410 is assigned to it). We'll find other uses for :keyword:`del` later. 411 412 413 .. _tut-tuples: 414 415 Tuples and Sequences 416 ==================== 417 418 We saw that lists and strings have many common properties, such as indexing and 419 slicing operations. They are two examples of *sequence* data types (see 420 :ref:`typesseq`). Since Python is an evolving language, other sequence data 421 types may be added. There is also another standard sequence data type: the 422 *tuple*. 423 424 A tuple consists of a number of values separated by commas, for instance:: 425 426 >>> t = 12345, 54321, 'hello!' 427 >>> t[0] 428 12345 429 >>> t 430 (12345, 54321, 'hello!') 431 >>> # Tuples may be nested: 432 ... u = t, (1, 2, 3, 4, 5) 433 >>> u 434 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) 435 >>> # Tuples are immutable: 436 ... t[0] = 88888 437 Traceback (most recent call last): 438 File "<stdin>", line 1, in <module> 439 TypeError: 'tuple' object does not support item assignment 440 >>> # but they can contain mutable objects: 441 ... v = ([1, 2, 3], [3, 2, 1]) 442 >>> v 443 ([1, 2, 3], [3, 2, 1]) 444 445 446 As you see, on output tuples are always enclosed in parentheses, so that nested 447 tuples are interpreted correctly; they may be input with or without surrounding 448 parentheses, although often parentheses are necessary anyway (if the tuple is 449 part of a larger expression). It is not possible to assign to the individual 450 items of a tuple, however it is possible to create tuples which contain mutable 451 objects, such as lists. 452 453 Though tuples may seem similar to lists, they are often used in different 454 situations and for different purposes. 455 Tuples are :term:`immutable`, and usually contain a heterogeneous sequence of 456 elements that are accessed via unpacking (see later in this section) or indexing 457 (or even by attribute in the case of :func:`namedtuples <collections.namedtuple>`). 458 Lists are :term:`mutable`, and their elements are usually homogeneous and are 459 accessed by iterating over the list. 460 461 A special problem is the construction of tuples containing 0 or 1 items: the 462 syntax has some extra quirks to accommodate these. Empty tuples are constructed 463 by an empty pair of parentheses; a tuple with one item is constructed by 464 following a value with a comma (it is not sufficient to enclose a single value 465 in parentheses). Ugly, but effective. For example:: 466 467 >>> empty = () 468 >>> singleton = 'hello', # <-- note trailing comma 469 >>> len(empty) 470 0 471 >>> len(singleton) 472 1 473 >>> singleton 474 ('hello',) 475 476 The statement ``t = 12345, 54321, 'hello!'`` is an example of *tuple packing*: 477 the values ``12345``, ``54321`` and ``'hello!'`` are packed together in a tuple. 478 The reverse operation is also possible:: 479 480 >>> x, y, z = t 481 482 This is called, appropriately enough, *sequence unpacking* and works for any 483 sequence on the right-hand side. Sequence unpacking requires the list of 484 variables on the left to have the same number of elements as the length of the 485 sequence. Note that multiple assignment is really just a combination of tuple 486 packing and sequence unpacking. 487 488 489 .. _tut-sets: 490 491 Sets 492 ==== 493 494 Python also includes a data type for *sets*. A set is an unordered collection 495 with no duplicate elements. Basic uses include membership testing and 496 eliminating duplicate entries. Set objects also support mathematical operations 497 like union, intersection, difference, and symmetric difference. 498 499 Curly braces or the :func:`set` function can be used to create sets. Note: to 500 create an empty set you have to use ``set()``, not ``{}``; the latter creates an 501 empty dictionary, a data structure that we discuss in the next section. 502 503 Here is a brief demonstration:: 504 505 >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] 506 >>> fruit = set(basket) # create a set without duplicates 507 >>> fruit 508 set(['orange', 'pear', 'apple', 'banana']) 509 >>> 'orange' in fruit # fast membership testing 510 True 511 >>> 'crabgrass' in fruit 512 False 513 514 >>> # Demonstrate set operations on unique letters from two words 515 ... 516 >>> a = set('abracadabra') 517 >>> b = set('alacazam') 518 >>> a # unique letters in a 519 set(['a', 'r', 'b', 'c', 'd']) 520 >>> a - b # letters in a but not in b 521 set(['r', 'd', 'b']) 522 >>> a | b # letters in either a or b 523 set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l']) 524 >>> a & b # letters in both a and b 525 set(['a', 'c']) 526 >>> a ^ b # letters in a or b but not both 527 set(['r', 'd', 'b', 'm', 'z', 'l']) 528 529 Similarly to :ref:`list comprehensions <tut-listcomps>`, set comprehensions 530 are also supported:: 531 532 >>> a = {x for x in 'abracadabra' if x not in 'abc'} 533 >>> a 534 set(['r', 'd']) 535 536 537 .. _tut-dictionaries: 538 539 Dictionaries 540 ============ 541 542 Another useful data type built into Python is the *dictionary* (see 543 :ref:`typesmapping`). Dictionaries are sometimes found in other languages as 544 "associative memories" or "associative arrays". Unlike sequences, which are 545 indexed by a range of numbers, dictionaries are indexed by *keys*, which can be 546 any immutable type; strings and numbers can always be keys. Tuples can be used 547 as keys if they contain only strings, numbers, or tuples; if a tuple contains 548 any mutable object either directly or indirectly, it cannot be used as a key. 549 You can't use lists as keys, since lists can be modified in place using index 550 assignments, slice assignments, or methods like :meth:`append` and 551 :meth:`extend`. 552 553 It is best to think of a dictionary as an unordered set of *key: value* pairs, 554 with the requirement that the keys are unique (within one dictionary). A pair of 555 braces creates an empty dictionary: ``{}``. Placing a comma-separated list of 556 key:value pairs within the braces adds initial key:value pairs to the 557 dictionary; this is also the way dictionaries are written on output. 558 559 The main operations on a dictionary are storing a value with some key and 560 extracting the value given the key. It is also possible to delete a key:value 561 pair with ``del``. If you store using a key that is already in use, the old 562 value associated with that key is forgotten. It is an error to extract a value 563 using a non-existent key. 564 565 The :meth:`keys` method of a dictionary object returns a list of all the keys 566 used in the dictionary, in arbitrary order (if you want it sorted, just apply 567 the :func:`sorted` function to it). To check whether a single key is in the 568 dictionary, use the :keyword:`in` keyword. 569 570 Here is a small example using a dictionary:: 571 572 >>> tel = {'jack': 4098, 'sape': 4139} 573 >>> tel['guido'] = 4127 574 >>> tel 575 {'sape': 4139, 'guido': 4127, 'jack': 4098} 576 >>> tel['jack'] 577 4098 578 >>> del tel['sape'] 579 >>> tel['irv'] = 4127 580 >>> tel 581 {'guido': 4127, 'irv': 4127, 'jack': 4098} 582 >>> tel.keys() 583 ['guido', 'irv', 'jack'] 584 >>> 'guido' in tel 585 True 586 587 The :func:`dict` constructor builds dictionaries directly from sequences of 588 key-value pairs:: 589 590 >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) 591 {'sape': 4139, 'jack': 4098, 'guido': 4127} 592 593 In addition, dict comprehensions can be used to create dictionaries from 594 arbitrary key and value expressions:: 595 596 >>> {x: x**2 for x in (2, 4, 6)} 597 {2: 4, 4: 16, 6: 36} 598 599 When the keys are simple strings, it is sometimes easier to specify pairs using 600 keyword arguments:: 601 602 >>> dict(sape=4139, guido=4127, jack=4098) 603 {'sape': 4139, 'jack': 4098, 'guido': 4127} 604 605 606 .. _tut-loopidioms: 607 608 Looping Techniques 609 ================== 610 611 When looping through a sequence, the position index and corresponding value can 612 be retrieved at the same time using the :func:`enumerate` function. :: 613 614 >>> for i, v in enumerate(['tic', 'tac', 'toe']): 615 ... print i, v 616 ... 617 0 tic 618 1 tac 619 2 toe 620 621 To loop over two or more sequences at the same time, the entries can be paired 622 with the :func:`zip` function. :: 623 624 >>> questions = ['name', 'quest', 'favorite color'] 625 >>> answers = ['lancelot', 'the holy grail', 'blue'] 626 >>> for q, a in zip(questions, answers): 627 ... print 'What is your {0}? It is {1}.'.format(q, a) 628 ... 629 What is your name? It is lancelot. 630 What is your quest? It is the holy grail. 631 What is your favorite color? It is blue. 632 633 To loop over a sequence in reverse, first specify the sequence in a forward 634 direction and then call the :func:`reversed` function. :: 635 636 >>> for i in reversed(xrange(1,10,2)): 637 ... print i 638 ... 639 9 640 7 641 5 642 3 643 1 644 645 To loop over a sequence in sorted order, use the :func:`sorted` function which 646 returns a new sorted list while leaving the source unaltered. :: 647 648 >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] 649 >>> for f in sorted(set(basket)): 650 ... print f 651 ... 652 apple 653 banana 654 orange 655 pear 656 657 When looping through dictionaries, the key and corresponding value can be 658 retrieved at the same time using the :meth:`iteritems` method. :: 659 660 >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'} 661 >>> for k, v in knights.iteritems(): 662 ... print k, v 663 ... 664 gallahad the pure 665 robin the brave 666 667 It is sometimes tempting to change a list while you are looping over it; 668 however, it is often simpler and safer to create a new list instead. :: 669 670 >>> import math 671 >>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8] 672 >>> filtered_data = [] 673 >>> for value in raw_data: 674 ... if not math.isnan(value): 675 ... filtered_data.append(value) 676 ... 677 >>> filtered_data 678 [56.2, 51.7, 55.3, 52.5, 47.8] 679 680 681 .. _tut-conditions: 682 683 More on Conditions 684 ================== 685 686 The conditions used in ``while`` and ``if`` statements can contain any 687 operators, not just comparisons. 688 689 The comparison operators ``in`` and ``not in`` check whether a value occurs 690 (does not occur) in a sequence. The operators ``is`` and ``is not`` compare 691 whether two objects are really the same object; this only matters for mutable 692 objects like lists. All comparison operators have the same priority, which is 693 lower than that of all numerical operators. 694 695 Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is 696 less than ``b`` and moreover ``b`` equals ``c``. 697 698 Comparisons may be combined using the Boolean operators ``and`` and ``or``, and 699 the outcome of a comparison (or of any other Boolean expression) may be negated 700 with ``not``. These have lower priorities than comparison operators; between 701 them, ``not`` has the highest priority and ``or`` the lowest, so that ``A and 702 not B or C`` is equivalent to ``(A and (not B)) or C``. As always, parentheses 703 can be used to express the desired composition. 704 705 The Boolean operators ``and`` and ``or`` are so-called *short-circuit* 706 operators: their arguments are evaluated from left to right, and evaluation 707 stops as soon as the outcome is determined. For example, if ``A`` and ``C`` are 708 true but ``B`` is false, ``A and B and C`` does not evaluate the expression 709 ``C``. When used as a general value and not as a Boolean, the return value of a 710 short-circuit operator is the last evaluated argument. 711 712 It is possible to assign the result of a comparison or other Boolean expression 713 to a variable. For example, :: 714 715 >>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance' 716 >>> non_null = string1 or string2 or string3 717 >>> non_null 718 'Trondheim' 719 720 Note that in Python, unlike C, assignment cannot occur inside expressions. C 721 programmers may grumble about this, but it avoids a common class of problems 722 encountered in C programs: typing ``=`` in an expression when ``==`` was 723 intended. 724 725 726 .. _tut-comparing: 727 728 Comparing Sequences and Other Types 729 =================================== 730 731 Sequence objects may be compared to other objects with the same sequence type. 732 The comparison uses *lexicographical* ordering: first the first two items are 733 compared, and if they differ this determines the outcome of the comparison; if 734 they are equal, the next two items are compared, and so on, until either 735 sequence is exhausted. If two items to be compared are themselves sequences of 736 the same type, the lexicographical comparison is carried out recursively. If 737 all items of two sequences compare equal, the sequences are considered equal. 738 If one sequence is an initial sub-sequence of the other, the shorter sequence is 739 the smaller (lesser) one. Lexicographical ordering for strings uses the ASCII 740 ordering for individual characters. Some examples of comparisons between 741 sequences of the same type:: 742 743 (1, 2, 3) < (1, 2, 4) 744 [1, 2, 3] < [1, 2, 4] 745 'ABC' < 'C' < 'Pascal' < 'Python' 746 (1, 2, 3, 4) < (1, 2, 4) 747 (1, 2) < (1, 2, -1) 748 (1, 2, 3) == (1.0, 2.0, 3.0) 749 (1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4) 750 751 Note that comparing objects of different types is legal. The outcome is 752 deterministic but arbitrary: the types are ordered by their name. Thus, a list 753 is always smaller than a string, a string is always smaller than a tuple, etc. 754 [#]_ Mixed numeric types are compared according to their numeric value, so 0 755 equals 0.0, etc. 756 757 758 .. rubric:: Footnotes 759 760 .. [#] The rules for comparing objects of different types should not be relied upon; 761 they may change in a future version of the language. 762 763