Wednesday Lecture
Contents
Wednesday Lecture¶
Practice Exercises¶
Try to solve the following:
Print the word hello 5 times. Use a for loop.
Make a list containing the word hello 5 times. Use list comprehension.
Make a list containing the even numbers from 0 to 20 (inclusive). Save it with the name
even_list.Make a list containing the squares of the numbers in
even list.(This is probably too hard. Try to find the answer by Google searching.) Write code that turns an integer like
8245313into a list of integers, like[8,2,4,5,3,1,3].
Answer 1¶
for i in range(5):
print('hello')
hello
hello
hello
hello
hello
Since the variable name i is never used in the above code, some people would replace it with an underscore _. I don’t necessarily recommend doing this, but it is good to recognize it if you see it in somebody else’s code.
for _ in range(5):
print('hello')
hello
hello
hello
hello
hello
Answer 2¶
I don’t have a precise definition for what makes the following list comprehension, but the most important aspects are:
Square brackets (that makes it a list)
The thing you want to go into the list (in this case, the string
"hello")How many repetitions/iterations there should be.
["hello" for x in range(5)]
['hello', 'hello', 'hello', 'hello', 'hello']
Some other approaches which are not list comprehension.
You can combine two lists using +:
[1,3,5]+["hello" for i in range(2)]
[1, 3, 5, 'hello', 'hello']
So it makes sense that if you use *, that combines multiple copies of the same list:
["hello"]*5
['hello', 'hello', 'hello', 'hello', 'hello']
Answer 3¶
Here is one approach, using list comprehension:
even_list = [x for x in range(0,22,2)]
even_list
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Here is another approach, which converts the range object to a list object directly:
even_list = list(range(0,22,2))
even_list
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Timing in Deepnote notebooks¶
The two approaches seem comparable in terms of speed.
%%timeit
[x for x in range(0,2000000,2)]
39.9 ms ± 228 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
list(range(0,2000000,2))
22.7 ms ± 1.16 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Answer 4¶
Again using list comprehension:
[i**2 for i in even_list]
[0, 4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
Answer 5¶
This question was difficult, but I hope each step in the answer makes sense.
n = 8245313
n_str = str(n)
n_list = list(n_str)
n_final = [int(x) for x in n_list]
n_final
[8, 2, 4, 5, 3, 1, 3]
If you want, you can do the whole thing at once:
n = 8245313
n_final = [int(x) for x in list(str(n))]
n_final
[8, 2, 4, 5, 3, 1, 3]
Defining a function in Python¶
Here is the basic syntax.
def f(x):
return x**2
f(10)
100
It works equally well with multiple variables and multiple lines of code (just make sure they’re all indented).
def g(x,y):
z = x+y
return ["hello" for i in range(z)]
g(2,1)
['hello', 'hello', 'hello']
def h(n):
i = n+2
return i**2
h(10)
144
h(2)+2
18
It is okay to have the function not return anything, but then there is no output to use.
def j(n):
for i in range(n):
print("hi")
Maybe it looks like there is an output:
z = j(5)
hi
hi
hi
hi
hi
But we can see that the “output” is a NoneType:
type(z)
NoneType
This can be a common source of mistakes. For example, maybe the author of the next code wants v to be equal to [3,3,2,5], but it isn’t.
w = [3,3,2]
v = w.append(5)
v
type(v)
NoneType
The expression w.append(5) did not generate an output; instead, it changed the value of w.
w
[3, 3, 2, 5]