Lists

97
Lists Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http://software-carpentry.org/license.html for more information. Python

Transcript of Lists

Page 1: Lists

Lists

Copyright © Software Carpentry 2010

This work is licensed under the Creative Commons Attribution License

See http://software-carpentry.org/license.html for more information.

Python

Page 2: Lists

Python Lists

Loops let us do things many times

Page 3: Lists

Python Lists

Loops let us do things many times

Collections let us store many values together

Page 4: Lists

Python Lists

Loops let us do things many times

Collections let us store many values together

Most popular collection is a list

Page 5: Lists

Python Lists

Create using [value, value, ...]

Page 6: Lists

Python Lists

Create using [value, value, ...]

Get/set values using var[index]

Page 7: Lists

Python Lists

Create using [value, value, ...]

Get/set values using var[index]

gases = ['He', 'Ne', 'Ar', 'Kr']print gases['He', 'Ne', 'Ar', 'Kr']

Page 8: Lists

Python Lists

Create using [value, value, ...]

Get/set values using var[index]

gases = ['He', 'Ne', 'Ar', 'Kr']print gases['He', 'Ne', 'Ar', 'Kr']

print gases[1]Ne

Page 9: Lists

Python Lists

Index from 0, not 1

Page 10: Lists

Python Lists

Index from 0, not 1

Reasons made sense for C in 1970...

Page 11: Lists

Python Lists

Index from 0, not 1

Reasons made sense for C in 1970...

It's an error to try to access out of range

Page 12: Lists

Python Lists

Index from 0, not 1

Reasons made sense for C in 1970...

It's an error to try to access out of range

gases = ['He', 'Ne', 'Ar', 'Kr']print gases[4]IndexError: list index out of range

Page 13: Lists

Python Lists

Use len(list) to get length of list

Page 14: Lists

Python Lists

Use len(list) to get length of list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4

Page 15: Lists

Python Lists

Use len(list) to get length of list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4

Returns 0 for the empty list

etheric = []print len(etheric)0

Page 16: Lists

Python Lists

Some negative indices work

Page 17: Lists

Python Lists

Some negative indices work

values[-1] is last element, values[-2] next-to-last, ...

Page 18: Lists

Python Lists

Some negative indices work

values[-1] is last element, values[-2] next-to-last, ...

gases = ['He', 'Ne', 'Ar', 'Kr']

Page 19: Lists

Python Lists

Some negative indices work

values[-1] is last element, values[-2] next-to-last, ...

gases = ['He', 'Ne', 'Ar', 'Kr']print gases[-1], gases[-4]Kr He

Page 20: Lists

Python Lists

Some negative indices work

values[-1] is last element, values[-2] next-to-last, ...

gases = ['He', 'Ne', 'Ar', 'Kr']print gases[-1], gases[-4]Kr He

values[-1] is much nicer than values[len(values)-1]

Page 21: Lists

Python Lists

Some negative indices work

values[-1] is last element, values[-2] next-to-last, ...

gases = ['He', 'Ne', 'Ar', 'Kr']print gases[-1], gases[-4]Kr He

less error prone

values[-1] is much nicer than values[len(values)-1]

Page 22: Lists

Python Lists

Mutable : can change it after it is created

Page 23: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelled

Mutable : can change it after it is created

Page 24: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelledgases[3] = 'Kr'

Mutable : can change it after it is created

Page 25: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelledgases[3] = 'Kr'print gases['He', 'Ne', 'Ar', 'Kr']

Mutable : can change it after it is created

Page 26: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelledgases[3] = 'Kr'print gases['He', 'Ne', 'Ar', 'Kr']

Location must exist before assignment

Mutable : can change it after it is created

Page 27: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelledgases[3] = 'Kr'print gases['He', 'Ne', 'Ar', 'Kr']

Location must exist before assignment

gases = ['He', 'Ne', 'Ar', 'Kr']

Mutable : can change it after it is created

Page 28: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'K'] # last entry misspelledgases[3] = 'Kr'print gases['He', 'Ne', 'Ar', 'Kr']

Location must exist before assignment

gases = ['He', 'Ne', 'Ar', 'Kr']gases[4] = 'Xe'IndexError: list assignment index out of range

Mutable : can change it after it is created

Page 29: Lists

Python Lists

Heterogeneous : can store values of many kinds

Page 30: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]

Page 31: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]

[string, int]

Page 32: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]

'He'2

'Ne'

8

helium

neon

Page 33: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]gases = [helium, neon]

Page 34: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]gases = [helium, neon]

'He'2

'Ne'

8

helium

neon

gases

Page 35: Lists

Python Lists

Heterogeneous : can store values of many kinds

helium = ['He', 2]neon = ['Ne', 8]gases = [helium, neon]

'He'2

'Ne'

8

helium

neon

gases

Devote a whole

episode to this

Page 36: Lists

Python Lists

Loop over elements to "do all"

Page 37: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

Page 38: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1

Page 39: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1

First legal index

Page 40: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1 Next index

Page 41: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1

Defines set of legal indices

Page 42: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1HeNeArKr

Page 43: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1HeNeArKr

Tedious to type in over and over again

Page 44: Lists

Python Lists

Loop over elements to "do all"

Use while to step through all possible indices

gases = ['He', 'Ne', 'Ar', 'Kr']i = 0while i < len(gases): print gases[i] i += 1HeNeArKr

Tedious to type in over and over again

And it's easy to forget the "+= 1" at the end

Page 45: Lists

Python Lists

Use a for loop to access each value in turn

Page 46: Lists

Python Lists

Use a for loop to access each value in turn

gases = ['He', 'Ne', 'Ar', 'Kr']for gas in gases: print gasHeNeArKr

Page 47: Lists

Python Lists

Use a for loop to access each value in turn

gases = ['He', 'Ne', 'Ar', 'Kr']for gas in gases: print gasHeNeArKr

Loop variable assigned each value in turn

Page 48: Lists

Python Lists

Use a for loop to access each value in turn

gases = ['He', 'Ne', 'Ar', 'Kr']for gas in gases: print gasHeNeArKr

Loop variable assigned each value in turn

Not each index

Page 49: Lists

Python Lists

Use a for loop to access each value in turn

gases = ['He', 'Ne', 'Ar', 'Kr']for gas in gases: print gasHeNeArKr

Loop variable assigned each value in turn

Not each index

Because that's the most common case

Page 50: Lists

Python Lists

Can delete entries entirely (shortens the list)

Page 51: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']

Can delete entries entirely (shortens the list)

Page 52: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']del gases[0]

Can delete entries entirely (shortens the list)

Page 53: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']del gases[0]print gases['Ne', 'Ar', 'Kr']

Can delete entries entirely (shortens the list)

Page 54: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']del gases[0]print gases['Ne', 'Ar', 'Kr']del gases[2]

Can delete entries entirely (shortens the list)

Page 55: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']del gases[0]print gases['Ne', 'Ar', 'Kr']del gases[2]print gases['Ne', 'Ar']

Can delete entries entirely (shortens the list)

Page 56: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']del gases[0]print gases['Ne', 'Ar', 'Kr']del gases[2]print gases['Ne', 'Ar']

Yes, deleting an index that doesn't exist is an error

Can delete entries entirely (shortens the list)

Page 57: Lists

Python Lists

Appending values to a list lengthens it

Page 58: Lists

Python Lists

Appending values to a list lengthens it

gases = []

Page 59: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')

Page 60: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')

Page 61: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')gases.append('Ar')

Page 62: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')gases.append('Ar')print gases['He', 'Ne', 'Ar']

Page 63: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')gases.append('Ar')print gases['He', 'Ne', 'Ar']

Most operations on lists are methods

Page 64: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')gases.append('Ar')print gases['He', 'Ne', 'Ar']

Most operations on lists are methods

A function that belongs to (and usually operates on)

specific data

Page 65: Lists

Python Lists

Appending values to a list lengthens it

gases = []gases.append('He')gases.append('Ne')gases.append('Ar')print gases['He', 'Ne', 'Ar']

Most operations on lists are methods

A function that belongs to (and usually operates on)

specific data

thing . method (args)

Page 66: Lists

Python Lists

Some useful list methods

Page 67: Lists

Python Lists

Some useful list methods

gases = ['He', 'He', 'Ar', 'Kr'] # 'He' is duplicated

Page 68: Lists

Python Lists

Some useful list methods

gases = ['He', 'He', 'Ar', 'Kr'] # 'He' is duplicatedprint gases.count('He')2

Page 69: Lists

Python Lists

Some useful list methods

gases = ['He', 'He', 'Ar', 'Kr'] # 'He' is duplicatedprint gases.count('He')2print gases.index('Ar')2

Page 70: Lists

Python Lists

Some useful list methods

gases = ['He', 'He', 'Ar', 'Kr'] # 'He' is duplicatedprint gases.count('He')2print gases.index('Ar')2gases.insert(1, 'Ne')

Page 71: Lists

Python Lists

Some useful list methods

gases = ['He', 'He', 'Ar', 'Kr'] # 'He' is duplicatedprint gases.count('He')2print gases.index('Ar')2gases.insert(1, 'Ne')print gases['He', 'Ne', 'He', 'Ar', 'Kr']

Page 72: Lists

Python Lists

Two that are often used incorrectly

Page 73: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']

Two that are often used incorrectly

Page 74: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()None

Two that are often used incorrectly

Page 75: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()Noneprint gases['Ar', 'He', 'Kr', 'Ne']

Two that are often used incorrectly

Page 76: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()Noneprint gases['Ar', 'He', 'Kr', 'Ne']print gases.reverse()None

Two that are often used incorrectly

Page 77: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()Noneprint gases['Ar', 'He', 'Kr', 'Ne']print gases.reverse()Noneprint gases['Ne', 'Kr', 'He', 'Ar']

Two that are often used incorrectly

Page 78: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()Noneprint gases['Ar', 'He', 'Kr', 'Ne']print gases.reverse()Noneprint gases['Ne', 'Kr', 'He', 'Ar']

A common bug

Two that are often used incorrectly

Page 79: Lists

Python Lists

gases = ['He', 'Ne', 'Ar', 'Kr']print gases.sort()Noneprint gases['Ar', 'He', 'Kr', 'Ne']print gases.reverse()Noneprint gases['Ne', 'Kr', 'He', 'Ar']

A common bug

gases = gases.sort() assigns None to gases

Two that are often used incorrectly

Page 80: Lists

Python Lists

Use in to test for membership

Page 81: Lists

Python Lists

Use in to test for membership

gases = ['He', 'Ne', 'Ar', 'Kr']

Page 82: Lists

Python Lists

Use in to test for membership

gases = ['He', 'Ne', 'Ar', 'Kr']print 'He' in gasesTrue

Page 83: Lists

Python Lists

Use in to test for membership

gases = ['He', 'Ne', 'Ar', 'Kr']print 'He' in gasesTrueif 'Pu' in gases: print 'But plutonium is not a gas!'else: print 'The universe is well ordered.'

Page 84: Lists

Python Lists

Use in to test for membership

gases = ['He', 'Ne', 'Ar', 'Kr']print 'He' in gasesTrueif 'Pu' in gases: print 'But plutonium is not a gas!'else: print 'The universe is well ordered.'The universe is well ordered.

Page 85: Lists

Python Lists

Use range to construct lists of numbers

Page 86: Lists

Python Lists

Use range to construct lists of numbers

print range(5)[0, 1, 2, 3, 4]

Page 87: Lists

Python Lists

Use range to construct lists of numbers

print range(5)[0, 1, 2, 3, 4]print range(2, 6)[2, 3, 4, 5]

Page 88: Lists

Python Lists

Use range to construct lists of numbers

print range(5)[0, 1, 2, 3, 4]print range(2, 6)[2, 3, 4, 5]print range(0, 10, 3)[0, 3, 6, 9]

Page 89: Lists

Python Lists

Use range to construct lists of numbers

print range(5)[0, 1, 2, 3, 4]print range(2, 6)[2, 3, 4, 5]print range(0, 10, 3)[0, 3, 6, 9]print range(10, 0)[]

Page 90: Lists

Python Lists

So range(len(list)) is all indices for the list

Page 91: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']

Page 92: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4

Page 93: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4print range(len(gases))[0, 1, 2, 3]

Page 94: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4print range(len(gases))[0, 1, 2, 3]for i in range(len(gases)): print i, gases[i]

Page 95: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4print range(len(gases))[0, 1, 2, 3]for i in range(len(gases)): print i, gases[i]0 He1 Ne2 Ar3 Kr

Page 96: Lists

Python Lists

So range(len(list)) is all indices for the list

gases = ['He', 'Ne', 'Ar', 'Kr']print len(gases)4print range(len(gases))[0, 1, 2, 3]for i in range(len(gases)): print i, gases[i]0 He1 Ne2 Ar3 Kr

A very common idiom in Python

Page 97: Lists

October 2010

narrated by

Dominique Vuvan

Copyright © Software Carpentry 2010

This work is licensed under the Creative Commons Attribution License

See http://software-carpentry.org/license.html for more information.