blob: 44c09c37c0b803fdcaa59a0d8b56a084f2f04f09 [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
Georg Brandl388349a2011-10-08 18:32:40 +020022 Add an item to the end of the list. Equivalent to ``a[len(a):] = [x]``.
Georg Brandl116aa622007-08-15 14:28:22 +000023
24
25.. method:: list.extend(L)
Christian Heimes4fbc72b2008-03-22 00:47:35 +000026 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000027
Georg Brandl388349a2011-10-08 18:32:40 +020028 Extend the list by appending all the items in the given list. Equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +000029 ``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
Georg Brandl388349a2011-10-08 18:32:40 +020043 Remove the first item from the list whose value is *x*. It is an error if
44 there is no such item.
Georg Brandl116aa622007-08-15 14:28:22 +000045
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
Georg Brandl388349a2011-10-08 18:32:40 +020073 Sort the items of the list in place.
Georg Brandl116aa622007-08-15 14:28:22 +000074
75
76.. method:: list.reverse()
Christian Heimes4fbc72b2008-03-22 00:47:35 +000077 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000078
Georg Brandl388349a2011-10-08 18:32:40 +020079 Reverse the elements of the list in place.
80
Georg Brandl116aa622007-08-15 14:28:22 +000081
82An example that uses most of the list methods::
83
84 >>> a = [66.25, 333, 333, 1, 1234.5]
Guido van Rossum0616b792007-08-31 03:25:11 +000085 >>> print(a.count(333), a.count(66.25), a.count('x'))
Georg Brandl116aa622007-08-15 14:28:22 +000086 2 1 0
87 >>> a.insert(2, -1)
88 >>> a.append(333)
89 >>> a
90 [66.25, 333, -1, 333, 1, 1234.5, 333]
91 >>> a.index(333)
92 1
93 >>> a.remove(333)
94 >>> a
95 [66.25, -1, 333, 1, 1234.5, 333]
96 >>> a.reverse()
97 >>> a
98 [333, 1234.5, 1, 333, -1, 66.25]
99 >>> a.sort()
100 >>> a
101 [-1, 1, 66.25, 333, 333, 1234.5]
102
Georg Brandl388349a2011-10-08 18:32:40 +0200103You might have noticed that methods like ``insert``, ``remove`` or ``sort`` that
104modify the list have no return value printed -- they return ``None``. [1]_ This
105is a design principle for all mutable data structures in Python.
106
Georg Brandl116aa622007-08-15 14:28:22 +0000107
108.. _tut-lists-as-stacks:
109
110Using Lists as Stacks
111---------------------
112
113.. sectionauthor:: Ka-Ping Yee <ping@lfw.org>
114
115
116The list methods make it very easy to use a list as a stack, where the last
117element added is the first element retrieved ("last-in, first-out"). To add an
118item to the top of the stack, use :meth:`append`. To retrieve an item from the
119top of the stack, use :meth:`pop` without an explicit index. For example::
120
121 >>> stack = [3, 4, 5]
122 >>> stack.append(6)
123 >>> stack.append(7)
124 >>> stack
125 [3, 4, 5, 6, 7]
126 >>> stack.pop()
127 7
128 >>> stack
129 [3, 4, 5, 6]
130 >>> stack.pop()
131 6
132 >>> stack.pop()
133 5
134 >>> stack
135 [3, 4]
136
137
138.. _tut-lists-as-queues:
139
140Using Lists as Queues
141---------------------
142
143.. sectionauthor:: Ka-Ping Yee <ping@lfw.org>
144
Ezio Melotti8f8db142010-03-31 07:45:32 +0000145It is also possible to use a list as a queue, where the first element added is
146the first element retrieved ("first-in, first-out"); however, lists are not
147efficient for this purpose. While appends and pops from the end of list are
148fast, doing inserts or pops from the beginning of a list is slow (because all
149of the other elements have to be shifted by one).
Georg Brandl116aa622007-08-15 14:28:22 +0000150
Ezio Melotti8f8db142010-03-31 07:45:32 +0000151To implement a queue, use :class:`collections.deque` which was designed to
152have fast appends and pops from both ends. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000153
Ezio Melotti8f8db142010-03-31 07:45:32 +0000154 >>> from collections import deque
155 >>> queue = deque(["Eric", "John", "Michael"])
Georg Brandl116aa622007-08-15 14:28:22 +0000156 >>> queue.append("Terry") # Terry arrives
157 >>> queue.append("Graham") # Graham arrives
Ezio Melotti8f8db142010-03-31 07:45:32 +0000158 >>> queue.popleft() # The first to arrive now leaves
Georg Brandl116aa622007-08-15 14:28:22 +0000159 'Eric'
Ezio Melotti8f8db142010-03-31 07:45:32 +0000160 >>> queue.popleft() # The second to arrive now leaves
Georg Brandl116aa622007-08-15 14:28:22 +0000161 'John'
Ezio Melotti8f8db142010-03-31 07:45:32 +0000162 >>> queue # Remaining queue in order of arrival
163 deque(['Michael', 'Terry', 'Graham'])
Georg Brandl718ce2c2010-03-21 09:51:44 +0000164
Georg Brandl116aa622007-08-15 14:28:22 +0000165
Georg Brandlfc11f272009-06-16 19:22:10 +0000166.. _tut-listcomps:
167
Georg Brandl116aa622007-08-15 14:28:22 +0000168List Comprehensions
169-------------------
170
Guido van Rossum0616b792007-08-31 03:25:11 +0000171List comprehensions provide a concise way to create lists from sequences.
172Common applications are to make lists where each element is the result of
Georg Brandl48310cd2009-01-03 21:18:54 +0000173some operations applied to each member of the sequence, or to create a
Guido van Rossum0616b792007-08-31 03:25:11 +0000174subsequence of those elements that satisfy a certain condition.
175
Georg Brandl7ae90dd2009-06-08 18:59:09 +0000176A list comprehension consists of brackets containing an expression followed
177by a :keyword:`for` clause, then zero or more :keyword:`for` or :keyword:`if`
178clauses. The result will be a list resulting from evaluating the expression in
179the context of the :keyword:`for` and :keyword:`if` clauses which follow it. If
180the expression would evaluate to a tuple, it must be parenthesized.
Guido van Rossum0616b792007-08-31 03:25:11 +0000181
182Here we take a list of numbers and return a list of three times each number::
183
184 >>> vec = [2, 4, 6]
185 >>> [3*x for x in vec]
186 [6, 12, 18]
187
188Now we get a little fancier::
189
Georg Brandle4ac7502007-09-03 07:10:24 +0000190 >>> [[x, x**2] for x in vec]
Guido van Rossum0616b792007-08-31 03:25:11 +0000191 [[2, 4], [4, 16], [6, 36]]
192
193Here we apply a method call to each item in a sequence::
Georg Brandl116aa622007-08-15 14:28:22 +0000194
195 >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
196 >>> [weapon.strip() for weapon in freshfruit]
197 ['banana', 'loganberry', 'passion fruit']
Guido van Rossum0616b792007-08-31 03:25:11 +0000198
Georg Brandle4ac7502007-09-03 07:10:24 +0000199Using the :keyword:`if` clause we can filter the stream::
Guido van Rossum0616b792007-08-31 03:25:11 +0000200
Georg Brandl116aa622007-08-15 14:28:22 +0000201 >>> [3*x for x in vec if x > 3]
202 [12, 18]
203 >>> [3*x for x in vec if x < 2]
204 []
Guido van Rossum0616b792007-08-31 03:25:11 +0000205
206Tuples can often be created without their parentheses, but not here::
207
Georg Brandla1c6a1c2009-01-03 21:26:05 +0000208 >>> [x, x**2 for x in vec] # error - parens required for tuples
Georg Brandl116aa622007-08-15 14:28:22 +0000209 File "<stdin>", line 1, in ?
210 [x, x**2 for x in vec]
211 ^
212 SyntaxError: invalid syntax
213 >>> [(x, x**2) for x in vec]
214 [(2, 4), (4, 16), (6, 36)]
Guido van Rossum0616b792007-08-31 03:25:11 +0000215
Georg Brandle4ac7502007-09-03 07:10:24 +0000216Here are some nested for loops and other fancy behavior::
Guido van Rossum0616b792007-08-31 03:25:11 +0000217
Georg Brandl116aa622007-08-15 14:28:22 +0000218 >>> vec1 = [2, 4, 6]
219 >>> vec2 = [4, 3, -9]
220 >>> [x*y for x in vec1 for y in vec2]
221 [8, 6, -18, 16, 12, -36, 24, 18, -54]
222 >>> [x+y for x in vec1 for y in vec2]
223 [6, 5, -7, 8, 7, -5, 10, 9, -3]
224 >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
225 [8, 12, -54]
226
Guido van Rossum0616b792007-08-31 03:25:11 +0000227List comprehensions can be applied to complex expressions and nested functions::
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Georg Brandlf6945182008-02-01 11:56:49 +0000229 >>> [str(round(355/113, i)) for i in range(1, 6)]
Georg Brandl116aa622007-08-15 14:28:22 +0000230 ['3.1', '3.14', '3.142', '3.1416', '3.14159']
231
232
Christian Heimes0449f632007-12-15 01:27:15 +0000233Nested List Comprehensions
234--------------------------
235
236If you've got the stomach for it, list comprehensions can be nested. They are a
237powerful tool but -- like all powerful tools -- they need to be used carefully,
238if at all.
239
Georg Brandl48310cd2009-01-03 21:18:54 +0000240Consider the following example of a 3x3 matrix held as a list containing three
Christian Heimes0449f632007-12-15 01:27:15 +0000241lists, one list per row::
242
243 >>> mat = [
244 ... [1, 2, 3],
245 ... [4, 5, 6],
246 ... [7, 8, 9],
247 ... ]
248
Georg Brandl48310cd2009-01-03 21:18:54 +0000249Now, if you wanted to swap rows and columns, you could use a list
Christian Heimes0449f632007-12-15 01:27:15 +0000250comprehension::
251
Neal Norwitz752abd02008-05-13 04:55:24 +0000252 >>> print([[row[i] for row in mat] for i in [0, 1, 2]])
Christian Heimes0449f632007-12-15 01:27:15 +0000253 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
254
255Special care has to be taken for the *nested* list comprehension:
256
257 To avoid apprehension when nesting list comprehensions, read from right to
258 left.
259
260A more verbose version of this snippet shows the flow explicitly::
261
262 for i in [0, 1, 2]:
263 for row in mat:
Neal Norwitz752abd02008-05-13 04:55:24 +0000264 print(row[i], end="")
Benjamin Petersonbfc644b2008-07-05 23:39:56 +0000265 print()
Christian Heimes0449f632007-12-15 01:27:15 +0000266
Mark Dickinson934896d2009-02-21 20:59:32 +0000267In real world, you should prefer built-in functions to complex flow statements.
Christian Heimes0449f632007-12-15 01:27:15 +0000268The :func:`zip` function would do a great job for this use case::
269
Georg Brandl409c9d72008-08-08 06:44:14 +0000270 >>> list(zip(*mat))
Christian Heimes0449f632007-12-15 01:27:15 +0000271 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
272
273See :ref:`tut-unpacking-arguments` for details on the asterisk in this line.
274
Georg Brandl116aa622007-08-15 14:28:22 +0000275.. _tut-del:
276
277The :keyword:`del` statement
278============================
279
280There is a way to remove an item from a list given its index instead of its
281value: the :keyword:`del` statement. This differs from the :meth:`pop` method
282which returns a value. The :keyword:`del` statement can also be used to remove
283slices from a list or clear the entire list (which we did earlier by assignment
284of an empty list to the slice). For example::
285
286 >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
287 >>> del a[0]
288 >>> a
289 [1, 66.25, 333, 333, 1234.5]
290 >>> del a[2:4]
291 >>> a
292 [1, 66.25, 1234.5]
293 >>> del a[:]
294 >>> a
295 []
296
297:keyword:`del` can also be used to delete entire variables::
298
299 >>> del a
300
301Referencing the name ``a`` hereafter is an error (at least until another value
302is assigned to it). We'll find other uses for :keyword:`del` later.
303
304
Georg Brandl5d955ed2008-09-13 17:18:21 +0000305.. _tut-tuples:
Georg Brandl116aa622007-08-15 14:28:22 +0000306
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000307Tuples and Sequences
308====================
309
310We saw that lists and strings have many common properties, such as indexing and
311slicing operations. They are two examples of *sequence* data types (see
312:ref:`typesseq`). Since Python is an evolving language, other sequence data
313types may be added. There is also another standard sequence data type: the
314*tuple*.
315
316A tuple consists of a number of values separated by commas, for instance::
317
318 >>> t = 12345, 54321, 'hello!'
319 >>> t[0]
320 12345
321 >>> t
322 (12345, 54321, 'hello!')
323 >>> # Tuples may be nested:
324 ... u = t, (1, 2, 3, 4, 5)
325 >>> u
326 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
327
328As you see, on output tuples are always enclosed in parentheses, so that nested
329tuples are interpreted correctly; they may be input with or without surrounding
330parentheses, although often parentheses are necessary anyway (if the tuple is
331part of a larger expression).
332
333Tuples have many uses. For example: (x, y) coordinate pairs, employee records
334from a database, etc. Tuples, like strings, are immutable: it is not possible
335to assign to the individual items of a tuple (you can simulate much of the same
336effect with slicing and concatenation, though). It is also possible to create
337tuples which contain mutable objects, such as lists.
338
339A special problem is the construction of tuples containing 0 or 1 items: the
340syntax has some extra quirks to accommodate these. Empty tuples are constructed
341by an empty pair of parentheses; a tuple with one item is constructed by
342following a value with a comma (it is not sufficient to enclose a single value
343in parentheses). Ugly, but effective. For example::
344
345 >>> empty = ()
346 >>> singleton = 'hello', # <-- note trailing comma
347 >>> len(empty)
348 0
349 >>> len(singleton)
350 1
351 >>> singleton
352 ('hello',)
353
354The statement ``t = 12345, 54321, 'hello!'`` is an example of *tuple packing*:
355the values ``12345``, ``54321`` and ``'hello!'`` are packed together in a tuple.
356The reverse operation is also possible::
357
358 >>> x, y, z = t
359
Benjamin Petersond23f8222009-04-05 19:13:16 +0000360This is called, appropriately enough, *sequence unpacking* and works for any
Georg Brandl7ae90dd2009-06-08 18:59:09 +0000361sequence on the right-hand side. Sequence unpacking requires that there are as
362many variables on the left side of the equals sign as there are elements in the
Benjamin Petersond23f8222009-04-05 19:13:16 +0000363sequence. Note that multiple assignment is really just a combination of tuple
364packing and sequence unpacking.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000365
366.. XXX Add a bit on the difference between tuples and lists.
367
368
Georg Brandl116aa622007-08-15 14:28:22 +0000369.. _tut-sets:
370
371Sets
372====
373
374Python also includes a data type for *sets*. A set is an unordered collection
375with no duplicate elements. Basic uses include membership testing and
376eliminating duplicate entries. Set objects also support mathematical operations
377like union, intersection, difference, and symmetric difference.
378
Georg Brandl448f20b2010-09-20 06:27:02 +0000379Curly braces or the :func:`set` function can be used to create sets. Note: To
Georg Brandl10e0e302009-06-08 20:25:55 +0000380create an empty set you have to use ``set()``, not ``{}``; the latter creates an
381empty dictionary, a data structure that we discuss in the next section.
Guido van Rossum0616b792007-08-31 03:25:11 +0000382
Georg Brandl116aa622007-08-15 14:28:22 +0000383Here is a brief demonstration::
384
Raymond Hettingerafdeca92010-08-08 01:30:45 +0000385 >>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
386 >>> print(basket) # show that duplicates have been removed
Georg Brandl1790ed22010-11-10 07:57:10 +0000387 {'orange', 'banana', 'pear', 'apple'}
Raymond Hettingerafdeca92010-08-08 01:30:45 +0000388 >>> 'orange' in basket # fast membership testing
Georg Brandl116aa622007-08-15 14:28:22 +0000389 True
Raymond Hettingerafdeca92010-08-08 01:30:45 +0000390 >>> 'crabgrass' in basket
Georg Brandl116aa622007-08-15 14:28:22 +0000391 False
392
393 >>> # Demonstrate set operations on unique letters from two words
394 ...
395 >>> a = set('abracadabra')
396 >>> b = set('alacazam')
397 >>> a # unique letters in a
Guido van Rossum0616b792007-08-31 03:25:11 +0000398 {'a', 'r', 'b', 'c', 'd'}
Georg Brandl116aa622007-08-15 14:28:22 +0000399 >>> a - b # letters in a but not in b
Guido van Rossum0616b792007-08-31 03:25:11 +0000400 {'r', 'd', 'b'}
Georg Brandl116aa622007-08-15 14:28:22 +0000401 >>> a | b # letters in either a or b
Guido van Rossum0616b792007-08-31 03:25:11 +0000402 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
Georg Brandl116aa622007-08-15 14:28:22 +0000403 >>> a & b # letters in both a and b
Guido van Rossum0616b792007-08-31 03:25:11 +0000404 {'a', 'c'}
Georg Brandl116aa622007-08-15 14:28:22 +0000405 >>> a ^ b # letters in a or b but not both
Guido van Rossum0616b792007-08-31 03:25:11 +0000406 {'r', 'd', 'b', 'm', 'z', 'l'}
407
Georg Brandlfc11f272009-06-16 19:22:10 +0000408Like :ref:`for lists <tut-listcomps>`, there is a set comprehension syntax::
Georg Brandlf6945182008-02-01 11:56:49 +0000409
410 >>> a = {x for x in 'abracadabra' if x not in 'abc'}
411 >>> a
412 {'r', 'd'}
Guido van Rossum0616b792007-08-31 03:25:11 +0000413
Georg Brandl116aa622007-08-15 14:28:22 +0000414
415
416.. _tut-dictionaries:
417
418Dictionaries
419============
420
421Another useful data type built into Python is the *dictionary* (see
422:ref:`typesmapping`). Dictionaries are sometimes found in other languages as
423"associative memories" or "associative arrays". Unlike sequences, which are
424indexed by a range of numbers, dictionaries are indexed by *keys*, which can be
425any immutable type; strings and numbers can always be keys. Tuples can be used
426as keys if they contain only strings, numbers, or tuples; if a tuple contains
427any mutable object either directly or indirectly, it cannot be used as a key.
428You can't use lists as keys, since lists can be modified in place using index
429assignments, slice assignments, or methods like :meth:`append` and
430:meth:`extend`.
431
432It is best to think of a dictionary as an unordered set of *key: value* pairs,
433with the requirement that the keys are unique (within one dictionary). A pair of
434braces creates an empty dictionary: ``{}``. Placing a comma-separated list of
435key:value pairs within the braces adds initial key:value pairs to the
436dictionary; this is also the way dictionaries are written on output.
437
438The main operations on a dictionary are storing a value with some key and
439extracting the value given the key. It is also possible to delete a key:value
440pair with ``del``. If you store using a key that is already in use, the old
441value associated with that key is forgotten. It is an error to extract a value
442using a non-existent key.
443
Georg Brandlabffe712008-12-15 08:28:37 +0000444Performing ``list(d.keys())`` on a dictionary returns a list of all the keys
Georg Brandlfc11f272009-06-16 19:22:10 +0000445used in the dictionary, in arbitrary order (if you want it sorted, just use
Georg Brandl388349a2011-10-08 18:32:40 +0200446``sorted(d.keys())`` instead). [2]_ To check whether a single key is in the
Georg Brandlfc11f272009-06-16 19:22:10 +0000447dictionary, use the :keyword:`in` keyword.
Georg Brandl116aa622007-08-15 14:28:22 +0000448
449Here is a small example using a dictionary::
450
451 >>> tel = {'jack': 4098, 'sape': 4139}
452 >>> tel['guido'] = 4127
453 >>> tel
454 {'sape': 4139, 'guido': 4127, 'jack': 4098}
455 >>> tel['jack']
456 4098
457 >>> del tel['sape']
458 >>> tel['irv'] = 4127
459 >>> tel
460 {'guido': 4127, 'irv': 4127, 'jack': 4098}
Neal Norwitze0906d12007-08-31 03:46:28 +0000461 >>> list(tel.keys())
Georg Brandlabffe712008-12-15 08:28:37 +0000462 ['irv', 'guido', 'jack']
463 >>> sorted(tel.keys())
Georg Brandl116aa622007-08-15 14:28:22 +0000464 ['guido', 'irv', 'jack']
Georg Brandl116aa622007-08-15 14:28:22 +0000465 >>> 'guido' in tel
466 True
Neal Norwitze0906d12007-08-31 03:46:28 +0000467 >>> 'jack' not in tel
468 False
Georg Brandl116aa622007-08-15 14:28:22 +0000469
Georg Brandlfc11f272009-06-16 19:22:10 +0000470The :func:`dict` constructor builds dictionaries directly from sequences of
Raymond Hettinger8699aea2009-06-16 20:49:30 +0000471key-value pairs::
Georg Brandl116aa622007-08-15 14:28:22 +0000472
473 >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
474 {'sape': 4139, 'jack': 4098, 'guido': 4127}
Georg Brandl116aa622007-08-15 14:28:22 +0000475
Georg Brandlf6945182008-02-01 11:56:49 +0000476In addition, dict comprehensions can be used to create dictionaries from
477arbitrary key and value expressions::
478
479 >>> {x: x**2 for x in (2, 4, 6)}
480 {2: 4, 4: 16, 6: 36}
Georg Brandl116aa622007-08-15 14:28:22 +0000481
482When the keys are simple strings, it is sometimes easier to specify pairs using
483keyword arguments::
484
485 >>> dict(sape=4139, guido=4127, jack=4098)
486 {'sape': 4139, 'jack': 4098, 'guido': 4127}
487
488
489.. _tut-loopidioms:
490
491Looping Techniques
492==================
493
494When looping through dictionaries, the key and corresponding value can be
Neal Norwitze0906d12007-08-31 03:46:28 +0000495retrieved at the same time using the :meth:`items` method. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000496
497 >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
Neal Norwitze0906d12007-08-31 03:46:28 +0000498 >>> for k, v in knights.items():
Guido van Rossum0616b792007-08-31 03:25:11 +0000499 ... print(k, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000500 ...
501 gallahad the pure
502 robin the brave
503
504When looping through a sequence, the position index and corresponding value can
505be retrieved at the same time using the :func:`enumerate` function. ::
506
507 >>> for i, v in enumerate(['tic', 'tac', 'toe']):
Guido van Rossum0616b792007-08-31 03:25:11 +0000508 ... print(i, v)
Georg Brandl116aa622007-08-15 14:28:22 +0000509 ...
510 0 tic
511 1 tac
512 2 toe
513
514To loop over two or more sequences at the same time, the entries can be paired
515with the :func:`zip` function. ::
516
517 >>> questions = ['name', 'quest', 'favorite color']
518 >>> answers = ['lancelot', 'the holy grail', 'blue']
519 >>> for q, a in zip(questions, answers):
Benjamin Petersone6f00632008-05-26 01:03:56 +0000520 ... print('What is your {0}? It is {1}.'.format(q, a))
Georg Brandl06788c92009-01-03 21:31:47 +0000521 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000522 What is your name? It is lancelot.
523 What is your quest? It is the holy grail.
524 What is your favorite color? It is blue.
525
526To loop over a sequence in reverse, first specify the sequence in a forward
527direction and then call the :func:`reversed` function. ::
528
Georg Brandle4ac7502007-09-03 07:10:24 +0000529 >>> for i in reversed(range(1, 10, 2)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000530 ... print(i)
Georg Brandl116aa622007-08-15 14:28:22 +0000531 ...
532 9
533 7
534 5
535 3
536 1
537
538To loop over a sequence in sorted order, use the :func:`sorted` function which
539returns a new sorted list while leaving the source unaltered. ::
540
541 >>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
542 >>> for f in sorted(set(basket)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000543 ... print(f)
Georg Brandl06788c92009-01-03 21:31:47 +0000544 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000545 apple
546 banana
547 orange
548 pear
549
550
551.. _tut-conditions:
552
553More on Conditions
554==================
555
556The conditions used in ``while`` and ``if`` statements can contain any
557operators, not just comparisons.
558
559The comparison operators ``in`` and ``not in`` check whether a value occurs
560(does not occur) in a sequence. The operators ``is`` and ``is not`` compare
561whether two objects are really the same object; this only matters for mutable
562objects like lists. All comparison operators have the same priority, which is
563lower than that of all numerical operators.
564
565Comparisons can be chained. For example, ``a < b == c`` tests whether ``a`` is
566less than ``b`` and moreover ``b`` equals ``c``.
567
568Comparisons may be combined using the Boolean operators ``and`` and ``or``, and
569the outcome of a comparison (or of any other Boolean expression) may be negated
570with ``not``. These have lower priorities than comparison operators; between
571them, ``not`` has the highest priority and ``or`` the lowest, so that ``A and
572not B or C`` is equivalent to ``(A and (not B)) or C``. As always, parentheses
573can be used to express the desired composition.
574
575The Boolean operators ``and`` and ``or`` are so-called *short-circuit*
576operators: their arguments are evaluated from left to right, and evaluation
577stops as soon as the outcome is determined. For example, if ``A`` and ``C`` are
578true but ``B`` is false, ``A and B and C`` does not evaluate the expression
579``C``. When used as a general value and not as a Boolean, the return value of a
580short-circuit operator is the last evaluated argument.
581
582It is possible to assign the result of a comparison or other Boolean expression
583to a variable. For example, ::
584
585 >>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
586 >>> non_null = string1 or string2 or string3
587 >>> non_null
588 'Trondheim'
589
590Note that in Python, unlike C, assignment cannot occur inside expressions. C
591programmers may grumble about this, but it avoids a common class of problems
592encountered in C programs: typing ``=`` in an expression when ``==`` was
593intended.
594
595
596.. _tut-comparing:
597
598Comparing Sequences and Other Types
599===================================
600
601Sequence objects may be compared to other objects with the same sequence type.
602The comparison uses *lexicographical* ordering: first the first two items are
603compared, and if they differ this determines the outcome of the comparison; if
604they are equal, the next two items are compared, and so on, until either
605sequence is exhausted. If two items to be compared are themselves sequences of
606the same type, the lexicographical comparison is carried out recursively. If
607all items of two sequences compare equal, the sequences are considered equal.
608If one sequence is an initial sub-sequence of the other, the shorter sequence is
Georg Brandlfc11f272009-06-16 19:22:10 +0000609the smaller (lesser) one. Lexicographical ordering for strings uses the Unicode
610codepoint number to order individual characters. Some examples of comparisons
611between sequences of the same type::
Georg Brandl116aa622007-08-15 14:28:22 +0000612
613 (1, 2, 3) < (1, 2, 4)
614 [1, 2, 3] < [1, 2, 4]
615 'ABC' < 'C' < 'Pascal' < 'Python'
616 (1, 2, 3, 4) < (1, 2, 4)
617 (1, 2) < (1, 2, -1)
618 (1, 2, 3) == (1.0, 2.0, 3.0)
619 (1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
620
Georg Brandl9f2c39a2007-10-08 14:08:36 +0000621Note that comparing objects of different types with ``<`` or ``>`` is legal
622provided that the objects have appropriate comparison methods. For example,
623mixed numeric types are compared according to their numeric value, so 0 equals
6240.0, etc. Otherwise, rather than providing an arbitrary ordering, the
625interpreter will raise a :exc:`TypeError` exception.
Georg Brandlfc11f272009-06-16 19:22:10 +0000626
627
628.. rubric:: Footnotes
629
Georg Brandl388349a2011-10-08 18:32:40 +0200630.. [1] Other languages may return the mutated object, which allows method
631 chaining, such as ``d->insert("a")->remove("b")->sort();``.
632
633.. [2] Calling ``d.keys()`` will return a :dfn:`dictionary view` object. It
Georg Brandlfc11f272009-06-16 19:22:10 +0000634 supports operations like membership test and iteration, but its contents
635 are not independent of the original dictionary -- it is only a *view*.