Python 
Slicing 
Copyright © Software Carpentry 2010 
This work is licensed under the Creative Commons Attribution License 
See http://software-carpentry.org/license.html for more information.
Lists, strings, and tuples are all sequences 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
>>>>>>>>>>>> element = 'uranium' 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
>>>>>>>>>>>> element = 'uranium' 
>>>>>>>>>>>> print element[1:4] 
ran 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
>>>>>>>>>>>> element = 'uranium' 
>>>>>>>>>>>> print element[1:4] 
ran 
>>>>>>>>>>>> print element[:4] 
uran 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
>>>>>>>>>>>> element = 'uranium' 
>>>>>>>>>>>> print element[1:4] 
ran 
>>>>>>>>>>>> print element[:4] 
uran 
>>>>>>>>>>>> print element[4:] 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
ium 
>>>>>>>>>>>> 
Python Slicing
Lists, strings, and tuples are all sequences 
Can be indexed by integers in the range 0…len(X)-1 
Can also be sliced using aa rraannggee ooff iinnddiicceess 
>>>>>>>>>>>> element = 'uranium' 
>>>>>>>>>>>> print element[1:4] 
ran 
>>>>>>>>>>>> print element[:4] 
uran 
>>>>>>>>>>>> print element[4:] 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
ium 
>>>>>>>>>>>> print element[-4:] 
nium 
>>>>>>>>>>>> 
Python Slicing
Python checks bounds when indexing 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
>>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
>>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' 
>>>>>>>>>>>> print element[400] 
IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
>>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' 
>>>>>>>>>>>> print element[400] 
IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee 
>>>>>>>>>>>> print element[1:400] 
ranium 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
>>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' 
>>>>>>>>>>>> print element[400] 
IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee 
>>>>>>>>>>>> print element[1:400] 
ranium 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
"A foolish consistency is 
the hobgoblin of little minds." 
— Ralph Waldo Emerson 
Python Slicing
Python checks bounds when indexing 
But truncates when slicing 
>>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' 
>>>>>>>>>>>> print element[400] 
IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee 
>>>>>>>>>>>> print element[1:400] 
ranium 
>>>>>>>>>>>> 
0 1 2 3 4 5 6 7 
u r a n i u m 
-7 -6 -5 -4 -3 -2 -1 
"A foolish consistency is 
the hobgoblin of little minds." 
— Ralph Waldo Emerson 
"Aw, you're kidding me!" 
— programmers 
Python Slicing
So text[1:3] is 0, 1, or 2 characters long 
Python Slicing
So text[1:3] is 0, 1, or 2 characters long 
'' '' 
''aa'' '''' 
'ab' 'b' 
'abc' 'bc' 
'abcdef' 'bc' 
Python Slicing
For consistency, text[1:1] is the empty string 
Python Slicing
For consistency, text[1:1] is the empty string 
– From index 1 up to (but not including) index 1 
Python Slicing
For consistency, text[1:1] is the empty string 
– From index 1 up to (but not including) index 1 
And text[3:1] is always tthhee eemmppttyy ssttrriinngg 
Python Slicing
For consistency, text[1:1] is the empty string 
– From index 1 up to (but not including) index 1 
And text[3:1] is always tthhee eemmppttyy ssttrriinngg 
– Not the reverse of text[1:3] 
Python Slicing
For consistency, text[1:1] is the empty string 
– From index 1 up to (but not including) index 1 
And text[3:1] is always tthhee eemmppttyy ssttrriinngg 
– Not the reverse of text[1:3] 
But text[1:-1] is everything except the first and 
last characters 
Python Slicing
Slicing always creates a new collection 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> middle = points[1:-1] 
>>>>>>>>>>>> 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> middle = points[1:-1] 
>>>>>>>>>>>> middle[0][0] = 'whoops' 
>>>>>>>>>>>> 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> middle = points[1:-1] 
>>>>>>>>>>>> middle[0][0] = 'whoops' 
>>>>>>>>>>>> middle[1][0] = 'aliasing' 
>>>>>>>>>>>> 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> middle = points[1:-1] 
>>>>>>>>>>>> middle[0][0] = 'whoops' 
>>>>>>>>>>>> middle[1][0] = 'aliasing' 
>>>>>>>>>>>> print middle 
[['whoops', 20], ['aliasing', 30]] 
>>>>>>>>>>>> 
Python Slicing
Slicing always creates a new collection 
Beware of aliasing 
>>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] 
>>>>>>>>>>>> middle = points[1:-1] 
>>>>>>>>>>>> middle[0][0] = 'whoops' 
>>>>>>>>>>>> middle[1][0] = 'aliasing' 
>>>>>>>>>>>> print middle 
[['whoops', 20], ['aliasing', 30]] 
>>>>>>>>>>>> print points 
[[10, 10], ['whoops', 20], ['aliasing', 30], [40, 40]] 
>>>>>>>>>>>> 
Python Slicing
10 
10 
20 
points 
20 
30 
30 
40 
40 
Python Slicing
10 
10 
20 
points 
20 
30 
30 
middle 
40 
40 
Python Slicing
10 
10 
points 
'whoops' 
20 
30 
30 
middle 
40 
40 
Python Slicing
10 
10 
points 
'whoops' 
20 
30 
middle 
'aliasing' 
40 
40 
Python Slicing
created by 
Greg Wilson 
October 2010 
Copyright © Software Carpentry 2010 
This work is licensed under the Creative Commons Attribution License 
See http://software-carpentry.org/license.html for more information.

Slicing

  • 1.
    Python Slicing Copyright© Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http://software-carpentry.org/license.html for more information.
  • 2.
    Lists, strings, andtuples are all sequences Python Slicing
  • 3.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Python Slicing
  • 4.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess Python Slicing
  • 5.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess >>>>>>>>>>>> element = 'uranium' >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 6.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess >>>>>>>>>>>> element = 'uranium' >>>>>>>>>>>> print element[1:4] ran >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 7.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess >>>>>>>>>>>> element = 'uranium' >>>>>>>>>>>> print element[1:4] ran >>>>>>>>>>>> print element[:4] uran >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 8.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess >>>>>>>>>>>> element = 'uranium' >>>>>>>>>>>> print element[1:4] ran >>>>>>>>>>>> print element[:4] uran >>>>>>>>>>>> print element[4:] 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 ium >>>>>>>>>>>> Python Slicing
  • 9.
    Lists, strings, andtuples are all sequences Can be indexed by integers in the range 0…len(X)-1 Can also be sliced using aa rraannggee ooff iinnddiicceess >>>>>>>>>>>> element = 'uranium' >>>>>>>>>>>> print element[1:4] ran >>>>>>>>>>>> print element[:4] uran >>>>>>>>>>>> print element[4:] 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 ium >>>>>>>>>>>> print element[-4:] nium >>>>>>>>>>>> Python Slicing
  • 10.
    Python checks boundswhen indexing Python Slicing
  • 11.
    Python checks boundswhen indexing But truncates when slicing Python Slicing
  • 12.
    Python checks boundswhen indexing But truncates when slicing >>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 13.
    Python checks boundswhen indexing But truncates when slicing >>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' >>>>>>>>>>>> print element[400] IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 14.
    Python checks boundswhen indexing But truncates when slicing >>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' >>>>>>>>>>>> print element[400] IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee >>>>>>>>>>>> print element[1:400] ranium >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 Python Slicing
  • 15.
    Python checks boundswhen indexing But truncates when slicing >>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' >>>>>>>>>>>> print element[400] IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee >>>>>>>>>>>> print element[1:400] ranium >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 "A foolish consistency is the hobgoblin of little minds." — Ralph Waldo Emerson Python Slicing
  • 16.
    Python checks boundswhen indexing But truncates when slicing >>>>>>>>>>>>>>>>>>>>>>>> eelleemmeenntt == ''uurraanniiuumm'' >>>>>>>>>>>> print element[400] IIIInnnnddddeeeexxxxEEEErrrrrrrroooorrrr:::: ssssttttrrrriiiinnnngggg iiiinnnnddddeeeexxxx oooouuuutttt ooooffff rrrraaaannnnggggeeee >>>>>>>>>>>> print element[1:400] ranium >>>>>>>>>>>> 0 1 2 3 4 5 6 7 u r a n i u m -7 -6 -5 -4 -3 -2 -1 "A foolish consistency is the hobgoblin of little minds." — Ralph Waldo Emerson "Aw, you're kidding me!" — programmers Python Slicing
  • 17.
    So text[1:3] is0, 1, or 2 characters long Python Slicing
  • 18.
    So text[1:3] is0, 1, or 2 characters long '' '' ''aa'' '''' 'ab' 'b' 'abc' 'bc' 'abcdef' 'bc' Python Slicing
  • 19.
    For consistency, text[1:1]is the empty string Python Slicing
  • 20.
    For consistency, text[1:1]is the empty string – From index 1 up to (but not including) index 1 Python Slicing
  • 21.
    For consistency, text[1:1]is the empty string – From index 1 up to (but not including) index 1 And text[3:1] is always tthhee eemmppttyy ssttrriinngg Python Slicing
  • 22.
    For consistency, text[1:1]is the empty string – From index 1 up to (but not including) index 1 And text[3:1] is always tthhee eemmppttyy ssttrriinngg – Not the reverse of text[1:3] Python Slicing
  • 23.
    For consistency, text[1:1]is the empty string – From index 1 up to (but not including) index 1 And text[3:1] is always tthhee eemmppttyy ssttrriinngg – Not the reverse of text[1:3] But text[1:-1] is everything except the first and last characters Python Slicing
  • 24.
    Slicing always createsa new collection Python Slicing
  • 25.
    Slicing always createsa new collection Beware of aliasing Python Slicing
  • 26.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> Python Slicing
  • 27.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> middle = points[1:-1] >>>>>>>>>>>> Python Slicing
  • 28.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> middle = points[1:-1] >>>>>>>>>>>> middle[0][0] = 'whoops' >>>>>>>>>>>> Python Slicing
  • 29.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> middle = points[1:-1] >>>>>>>>>>>> middle[0][0] = 'whoops' >>>>>>>>>>>> middle[1][0] = 'aliasing' >>>>>>>>>>>> Python Slicing
  • 30.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> middle = points[1:-1] >>>>>>>>>>>> middle[0][0] = 'whoops' >>>>>>>>>>>> middle[1][0] = 'aliasing' >>>>>>>>>>>> print middle [['whoops', 20], ['aliasing', 30]] >>>>>>>>>>>> Python Slicing
  • 31.
    Slicing always createsa new collection Beware of aliasing >>>>>>>>>>>>>>>>>>>>>>>> ppooiinnttss == [[[[1100,, 1100]],, [[2200,, 2200]],, [[3300,, 3300]],, [[4400,, 4400]]]] >>>>>>>>>>>> middle = points[1:-1] >>>>>>>>>>>> middle[0][0] = 'whoops' >>>>>>>>>>>> middle[1][0] = 'aliasing' >>>>>>>>>>>> print middle [['whoops', 20], ['aliasing', 30]] >>>>>>>>>>>> print points [[10, 10], ['whoops', 20], ['aliasing', 30], [40, 40]] >>>>>>>>>>>> Python Slicing
  • 32.
    10 10 20 points 20 30 30 40 40 Python Slicing
  • 33.
    10 10 20 points 20 30 30 middle 40 40 Python Slicing
  • 34.
    10 10 points 'whoops' 20 30 30 middle 40 40 Python Slicing
  • 35.
    10 10 points 'whoops' 20 30 middle 'aliasing' 40 40 Python Slicing
  • 36.
    created by GregWilson October 2010 Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http://software-carpentry.org/license.html for more information.