earnings = [91, 87, 115, 108]
The values are separated by commas, and enclosed in square brackets. We can access the individual elements as follows:
earnings[0]
91
earnings[1]
87
earnings[3]
108
The numbers 0, 1, and 3 are called indices (the singular is index). Note that we start from 0. The list earnings is of length 4 (since it has four elements), so the last possible index will be 3.
We can get the length of a list using the len() function:
len(earnings)
4
We have all the tools in order to print every element of a list in turn. For example, suppose we need to print, in turn, earnings[0], earnings[1], ... earnings[3]. In other words, suppose we need to print earnings[i] for every i between 0 and 3 inclusive. The way to do this is to use a for-loop:
for i in range(4):
print("You make", earnings[i], "thousand dollars a year!")
You make 91 thousand dollars a year! You make 87 thousand dollars a year! You make 115 thousand dollars a year! You make 108 thousand dollars a year!
We can make this a little nicer. We used for i in range(4) because we know that we need the index i to range from 0 to 3 because we know that earnings contains 4 elements. But we can use len(earnings) instead of 4 to get the same results:
for i in range(len(earnings)):
print(earnings[i])
91 87 115 108
If all we want to do is to print (or use somehow) the elements of the list earnings, there is a nicer way to do this using for. Note that the following is a new way of using for:
for amt in earnings:
print(amt)
91 87 115 108
for <elem> in <list> puts the elements of <list> into the variable <elem>, in turn.
Suppose we want to convert the amounts from US dollars to Canadian dollars. Here is how you might try to do this:
USD_TO_CAD = 1.3
for amt in earnings:
amt *= USD_TO_CAD
print('amt is now', amt)
print('earnings is now', earnings)
amt is now 118.3 amt is now 113.10000000000001 amt is now 149.5 amt is now 140.4 earnings is now [91, 87, 115, 108]
The value of amt changed every time, but earnings never did! What happenned? You can think of for amt in earnings variant as:
for i in range(len(earnings)):
amt = earnings[i]
amt *= USD_TO_CAD
It's clear why this wouldn't change earnings: what's changed is the variable amt, but not earnings[i]. It's the same situation as
a = 42
b = a
b = 43
b changes, but a would still be 42.
How can we change earnings? Just loop over all the indices.
USD_TO_CAD = 1.3
for i in range(len(earnings)):
earnings[i] *= USD_TO_CAD
print(earnings)
[118.3, 113.10000000000001, 149.5, 140.4]
A list L is non-decreasing if for every i, $L[i] \geq L[i-1]$. For example, [1, 2, 3, 3, 5, 100, 200] is non-decreasing, but [1, 0, 5, 6] is not, since its second element is smaller than its first element.
Let's write the function is_non_decreasing(L) that returns True iff L is non-decreasing.
def is_non_decreasing(L):
'''Return True iff L is non-decreasing
Arguments:
L -- a list of integers
'''
for i in range(1, len(L)): #start at i = 1, since it makes no sense to compare L[0] and L[-1]
if L[i] < L[i-1]:
return False #L is definitely not non-decreasing
#Checked for every i, and didn't return False, so we can return True
return True