Lists and Friends
Contents
Lists and Friends#
To solve these exercises you yould have read Lists and Friends. Only use features discussed there or in previous chapters.
Bad Coding Style#
Consider the following code snipped. What numbers appear on screen when printing a
, b
, e
, g
, and h
after executing the code? Don’t run the code, interpret each line manually.
a = 1
b = 2
c = [a, b]
c[0] = 3
d = c
d[1] = 4
c.append(5)
e = c[-1]
f = c[0:-1]
g = f[-1]
h = d[0]
Solution:
# your answer
Squares and Sums of List of Lists#
The following code yields incorrect outputs. Find the problem and solve it.
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = [a, b, c]
# compute squares
for i in range(0, 3):
for j in range(0, 3):
d[i][j] **= 2
# compute row sums
sum_a = a[0] + a[1] + a[2]
sum_b = b[0] + b[1] + b[2]
sum_c = c[0] + c[1] + c[2]
# print results
print('squares of d:', d)
print('sum of a:', sum_a)
print('sum of b:', sum_b)
print('sum of c:', sum_c)
Solution:
# your modifications
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = [a, b, c]
# compute squares
for i in range(0, 3):
for j in range(0, 3):
d[i][j] **= 2
# compute row sums
sum_a = a[0] + a[1] + a[2]
sum_b = b[0] + b[1] + b[2]
sum_c = c[0] + c[1] + c[2]
# print results
print('squares of d:', d)
print('sum of a:', sum_a)
print('sum of b:', sum_b)
print('sum of c:', sum_c)
squares of d: [[1, 4, 9], [16, 25, 36], [49, 64, 81]]
sum of a: 14
sum of b: 77
sum of c: 194
Slicing Instead of Loops 1#
Write a function shift
which takes a list, increases each item’s index by one (last item becomes first one), and returns the resulting list. Example: [1, 3, 5, 7]
should become [7, 1, 3, 5]
. Don’t use loops, but slicing syntax.
Solution:
# your solution
Slicing Instead of Loops 2#
Write a function shift_n
which takes a list and a positive integer n
and shifts the list n
times (cf. previous task). Don’t use loops. Do not forget to think about the case that n
is larger than the length of the list. Examples:
shift_n([1, 2, 3, 4, 5], 3)
should be[3, 4, 5, 1, 2]
.shift_n([1, 2, 3, 4, 5], 5)
should be[1, 2, 3, 4, 5]
.shift_n([1, 2, 3, 4, 5], 6)
should be[5, 1, 2, 3, 4]
.
Solution:
# your solution
Dictionary from Lists 1#
Given two lists keys
and values
create a dictionary. Use a for loop to fill an empty dictionary item by item. Test case:
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
Solution:
# your solution
Dictionary from Lists 2#
Given two lists keys
and values
create a dictionary. Use a dictionary comprehension. Test case:
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
Solution:
# your solution
Dictionary from Lists 3#
Given two lists keys
and values
create a dictionary. Call dict
and pass a list of key-value pairs. Test case:
keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3, 4]
Solution:
# your solution
One-Liner 1#
Given a list of numbers, write one line of code to create a new list containing only numbers greater than 3. Test case:
[4, 3, 2, 8, 6, 0, 4, 6, -2, 1]
Solution:
# your solution
One-Liner 2#
In one line of code create a new list containing every second number from a given list, if the number is between 1 and 10 (both included). Test case:
[-2, 3, 2, 6, 23, 1, 42, 42, 5, 10, 1, 12, 6, 4, 3]
Solution:
# your solution
One-Liner 3#
Write one line of code to square all numbers in a list of lists of numbers. Test case:
[[1, 2, 3], [7, 6, 5, 4], [8, 9]]
Solution:
# your solution
Manual Deep Copying#
Make a copy of a list of lists of numbers. In the end, changing a number in the copy must not modify the original numbers. Test case:
[[1, 2, 3], [7, 6, 5, 4], [8, 9]]
Solution:
# your solution