lst = []
for i in range(10):
lst += [i]
lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = []
for i in range(10):
lst.append(i)
lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = [i for i in range(10)]
lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = []
for i in range(10):
lst += [2]
lst.append(2)
lst
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
lst = [2 for i in range(10)]
lst
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
lst = [2*x for x in range(0,10,2)]
lst
[0, 4, 8, 12, 16]
lst2 = [l+1 for l in lst]
lst2
[1, 5, 9, 13, 17]
import time
We noticed yesterday that some functions \n take longer than others -- even our computer \n isn't fast enough to do every function "instantly"
def fib(n):
fib_i_prev_prev = 0 # initialized to F(0)
fib_i_prev = 1 # initialized to F(1)
for i in range(n - 1):
# compute the next number in the sequence
fib_i = fib_i_prev_prev + fib_i_prev
# save state to use for the next computation
fib_i_prev_prev = fib_i_prev
fib_i_prev = fib_i
return fib_i
def fib_rec(n):
if n == 0 or n == 1: return n
else: return fib(n-1) + fib(n-2)
start = time.time()
fib(40)
end = time.time()
print(end-start)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-8-c59952973ae6> in <module> ----> 1 start = time.time() 2 fib(40) 3 end = time.time() 4 print(end-start) NameError: name 'time' is not defined
start = time.time()
fib_rec(40)
end = time.time()
print(end-start)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-9-3399618e84ee> in <module> ----> 1 start = time.time() 2 fib_rec(40) 3 end = time.time() 4 print(end-start) NameError: name 'time' is not defined
We can experiment with how long a function takes with a simple example
for i in range(100000000):
result = i
print(result)
99999999
start = time.time()
n = 10**7
for i in range(n):
result = i
end = time.time()
time_1 = end-start
print('n: ', n, 'time: ', time_1, 'seconds')
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-12-3d77c27b67bc> in <module> ----> 1 start = time.time() 2 3 n = 10**7 4 for i in range(n): 5 result = i NameError: name 'time' is not defined
start = time.time()
n = 2*10**7
for i in range(n):
result = i
end = time.time()
time_2 = end-start
print('n: ', n, 'time: ', time_2, 'seconds')
n: 20000000 time: 1.5687339305877686 seconds
start = time.time()
n = 3*(10**7)
for i in range(n):
result = i
end = time.time()
time_3 = end-start
print('n: ', n, 'time: ', time_3, 'seconds')
n: 30000000 time: 2.2494289875030518 seconds
start = time.time()
n = 4*(10**7)
for i in range(n):
result = i
end = time.time()
time_4 = end-start
print('n: ', n, 'time: ', time_4, 'seconds')
n: 40000000 time: 3.0205681324005127 seconds
start = time.time()
n = 5*(10**7)
for i in range(n):
result = i
end = time.time()
time_5 = end-start
print('n: ', n, 'time: ', time_5, 'seconds')
n: 50000000 time: 3.7098798751831055 seconds
from matplotlib import pyplot as plt
plt.scatter([1*(10**7),2*(10**7),3*(10**7),4*(10**7),5*(10**7)], [time_1,time_2,time_3,time_4,time_5])
plt.title('Time vs n')
plt.xlabel('n')
plt.ylabel('Time (s)')
plt.show()
start = time.time()
n = 10000
for i in range(n):
for j in range(n):
result = j
print(result)
end = time.time()
print(end-start,'seconds')
9999 7.536921262741089 seconds
start = time.time()
for i in range(1000):
for j in range(1000):
result = j
end = time.time()
time_1 = end-start
print('n: ', 1000, 'time: ', time_1, 'seconds')
n: 1000 time: 0.09256196022033691 seconds
start = time.time()
for i in range(2000):
for j in range(2000):
result = j
end = time.time()
time_2 = end-start
print('n: ', 2000, 'time: ', time_2, 'seconds')
n: 2000 time: 0.2958109378814697 seconds
start = time.time()
for i in range(3000):
for j in range(3000):
result = j
end = time.time()
time_3 = end-start
print('n: ', 3000, 'time: ', time_3, 'seconds')
n: 3000 time: 0.692986011505127 seconds
start = time.time()
for i in range(4000):
for j in range(4000):
result = j
end = time.time()
time_4 = end-start
print('n: ', 4000, 'time: ', time_4, 'seconds')
n: 4000 time: 1.1643409729003906 seconds
start = time.time()
for i in range(5000):
for j in range(5000):
result = j
end = time.time()
time_5 = end-start
print('n: ', 5000, 'time: ', time_5, 'seconds')
n: 5000 time: 1.8884568214416504 seconds
start = time.time()
for i in range(6000):
for j in range(6000):
result = j
end = time.time()
time_6 = end-start
print('n: ', 6000, 'time: ', time_6, 'seconds')
n: 6000 time: 2.755131244659424 seconds
start = time.time()
for i in range(7000):
for j in range(7000):
result = j
end = time.time()
time_7 = end-start
print('n: ', 7000, 'time: ', time_7, 'seconds')
n: 7000 time: 3.8270530700683594 seconds
start = time.time()
for i in range(8000):
for j in range(8000):
result = j
end = time.time()
time_8 = end-start
print('n: ', 7000, 'time: ', time_8, 'seconds')
n: 7000 time: 4.851438045501709 seconds
plt.scatter([1000,2000,3000,4000,5000,6000,7000,8000], [time_1,time_2,time_3,time_4,time_5,time_6,time_7,time_8])
plt.title('Time vs Iterations')
plt.xlabel('Iterations')
plt.ylabel('Time (s)')
plt.show()
tas = ['hailey','wassim','shalom','monica','bre','aku','kidist','bruk']
Where in the list is aku
? (at which index -- remember indices start from 0)
Where in the list is wassim
? (at which index -- remember indices start from 0)
Write a function to find the index of a TA in the list
def find_index_of_name(lst,name):
return 0
What if the list is sorted?
tas_sorted = ['sxrtu6etraku','bre','bruk','hailey','kidist','monica','shalom','wassim']
Write a function to find aku
in the sorted list
Write a function to find wassim
in the sorted list
How can we sort a list?
Can anyone explain what's happening?
Real life insertion sort