diff options
author | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-10-16 03:01:38 (GMT) |
---|---|---|
committer | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-10-16 03:01:38 (GMT) |
commit | 0cffd6be56be6e7ce62e79c919fba32a53c4d18e (patch) | |
tree | a0a40e670cb7ecc4aabecbe5a5ca1e39f18f4969 | |
parent | fd6d3b149f78de2fb7953cc4f957e99b3db30813 (diff) | |
download | cpython-0cffd6be56be6e7ce62e79c919fba32a53c4d18e.zip cpython-0cffd6be56be6e7ce62e79c919fba32a53c4d18e.tar.gz cpython-0cffd6be56be6e7ce62e79c919fba32a53c4d18e.tar.bz2 |
Issue #16225: Backport from 3.2: Add additional note to tutorial about looping.
-rw-r--r-- | Doc/tutorial/controlflow.rst | 22 | ||||
-rw-r--r-- | Doc/tutorial/datastructures.rst | 13 |
2 files changed, 24 insertions, 11 deletions
diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst index 3d3af4e..e0ee46b 100644 --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -59,24 +59,24 @@ they appear in the sequence. For example (no pun intended): :: >>> # Measure some strings: - ... a = ['cat', 'window', 'defenestrate'] - >>> for x in a: - ... print x, len(x) + ... words = ['cat', 'window', 'defenestrate'] + >>> for w in words: + ... print w, len(w) ... cat 3 window 6 defenestrate 12 -It is not safe to modify the sequence being iterated over in the loop (this can -only happen for mutable sequence types, such as lists). If you need to modify -the list you are iterating over (for example, to duplicate selected items) you -must iterate over a copy. The slice notation makes this particularly -convenient:: +If you need to modify the sequence you are iterating over while inside the loop +(for example to duplicate selected items), it is recommended that you first +make a copy. Iterating over a sequence does not implicitly make a copy. The +slice notation makes this especially convenient:: - >>> for x in a[:]: # make a slice copy of the entire list - ... if len(x) > 6: a.insert(0, x) + >>> for w in words[:]: # Loop over a slice copy of the entire list. + ... if len(w) > 6: + ... words.insert(0, w) ... - >>> a + >>> words ['defenestrate', 'cat', 'window', 'defenestrate'] diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst index f55674e..88ab372 100644 --- a/Doc/tutorial/datastructures.rst +++ b/Doc/tutorial/datastructures.rst @@ -645,6 +645,19 @@ retrieved at the same time using the :meth:`iteritems` method. :: gallahad the pure robin the brave +To change a sequence you are iterating over while inside the loop (for +example to duplicate certain items), it is recommended that you first make +a copy. Looping over a sequence does not implicitly make a copy. The slice +notation makes this especially convenient:: + + >>> words = ['cat', 'window', 'defenestrate'] + >>> for w in words[:]: # Loop over a slice copy of the entire list. + ... if len(w) > 6: + ... words.insert(0, w) + ... + >>> words + ['defenestrate', 'cat', 'window', 'defenestrate'] + .. _tut-conditions: |