Programming with Python
Storing Multiple Values in Lists
- Explain what a list is.
- Create and index lists of simple values.
Just as a
for loop is a way to do operations many times, a list is a way to store many values. Unlike NumPy arrays, lists are built into the language (so we don’t have to load a library to use them). We create a list by putting values inside square brackets:
odds = [1, 3, 5, 7] print('odds are:', odds)
odds are: [1, 3, 5, 7]
We select individual elements from lists by indexing them:
print('first and last:', odds, odds[-1])
first and last: 1 7
and if we loop over a list, the loop variable is assigned elements one at a time:
for number in odds: print(number)
1 3 5 7
There is one important difference between lists and strings: we can change the values in a list, but we cannot change the characters in a string. For example:
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name print('names is originally:', names) names = 'Darwin' # correct the name print('final value of names:', names)
names is originally: ['Newton', 'Darwing', 'Turing'] final value of names: ['Newton', 'Darwin', 'Turing']
name = 'Bell' name = 'b'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-8-220df48aeb2e> in <module>() 1 name = 'Bell' ----> 2 name = 'b' TypeError: 'str' object does not support item assignment
There are many ways to change the contents of lists besides assigning new values to individual elements:
odds.append(11) print('odds after adding a value:', odds)
odds after adding a value: [1, 3, 5, 7, 11]
del odds print('odds after removing the first element:', odds)
odds after removing the first element: [3, 5, 7, 11]
odds.reverse() print('odds after reversing:', odds)
odds after reversing: [11, 7, 5, 3]
While modifying in place, it is useful to remember that Python treats lists in a slightly counterintuitive way.
If we make a list and (attempt to) copy it then modify in place, we can cause all sorts of trouble:
odds = [1, 3, 5, 7] primes = odds primes +=  print('primes:', primes) print('odds:', odds)
primes: [1, 3, 5, 7, 2] odds: [1, 3, 5, 7, 2]
This is because Python stores a list in memory, and then can use multiple names to refer to the same list. If all we want to do is copy a (simple) list, we can use the
list function, so we do not modify a list we did not mean to:
odds = [1, 3, 5, 7] primes = list(odds) primes +=  print('primes:', primes) print('odds:', odds)
primes: [1, 3, 5, 7, 2] odds: [1, 3, 5, 7]
This is different from how variables worked in lesson 1, and more similar to how a spreadsheet works.
Turn a string into a list
Use a for-loop to convert the string “hello” into a list of letters:
["h", "e", "l", "l", "o"]
Hint: You can create an empty list like this:
my_list = 
Tuples and exchanges
Explain what the overall effect of this code is:
left = 'L' right = 'R' temp = left left = right right = temp
Compare it to:
left, right = right, left
Do they always do the same thing? Which do you find easier to read?