data structures: list comprehensions: tests and solutions¶
tests¶
the code in list_comprehensions/tests/test_list_comprehensions.py from lists: list comprehensions
1import random
2import src.list_comprehensions
3import unittest
4
5
6def process(number):
7 return number ** 2
8
9
10def condition(number):
11 return number % 2 == 0
12
13
14class TestListComprehensions(unittest.TestCase):
15
16 def setUp(self):
17 self.a_list = []
18 self.iterable = range(0, random.randint(2, 1000))
19
20 def test_making_a_list_w_a_for_loop(self):
21 for item in self.iterable:
22 self.a_list.append(item)
23
24 self.assertEqual(self.a_list, list(self.iterable))
25 self.assertEqual(
26 src.list_comprehensions.a_for_loop(self.iterable),
27 self.a_list
28 )
29
30 def test_making_a_list_w_extend(self):
31 self.assertIsNone(self.a_list.extend(self.iterable))
32 self.assertEqual(self.a_list, list(self.iterable))
33
34 def test_making_a_list_w_a_list_comprehension(self):
35 self.assertEqual(
36 list(self.iterable),
37 [item for item in self.iterable]
38 )
39 self.assertEqual(
40 src.list_comprehensions.a_list_comprehension(self.iterable),
41 [item for item in self.iterable]
42 )
43
44 def test_making_a_list_w_conditions(self):
45 even_numbers, odd_numbers = [], []
46 for item in self.iterable:
47 if condition(item):
48 even_numbers.append(item)
49 else:
50 odd_numbers.append(item)
51
52 self.assertEqual(
53 even_numbers,
54 [item for item in self.iterable if condition(item)]
55 )
56 self.assertEqual(
57 src.list_comprehensions.get_even_numbers(self.iterable),
58 [item for item in self.iterable if condition(item)]
59 )
60 self.assertEqual(
61 odd_numbers,
62 [item for item in self.iterable if not condition(item)]
63 )
64 self.assertEqual(
65 src.list_comprehensions.get_odd_numbers(self.iterable),
66 [item for item in self.iterable if not condition(item)]
67 )
68
69 def test_making_a_list_w_processes(self):
70 square_club = []
71 for item in self.iterable:
72 square_club.append(process(item))
73
74 self.assertEqual(
75 square_club,
76 [process(item) for item in self.iterable]
77 )
78 self.assertEqual(
79 src.list_comprehensions.square(self.iterable),
80 [process(item) for item in self.iterable]
81 )
82
83 def test_making_a_list_w_processes_and_conditions(self):
84 even_squares, odd_squares = [], []
85 for item in self.iterable:
86 if condition(item):
87 even_squares.append(process(item))
88 else:
89 odd_squares.append(process(item))
90
91 self.assertEqual(
92 even_squares,
93 [process(item) for item in self.iterable if condition(item)]
94 )
95 self.assertEqual(
96 odd_squares,
97 [process(item) for item in self.iterable if not condition(item)]
98 )
99
100
101# Exceptions Encountered
102# AssertionError
103# NameError
104# AttributeError
solutions¶
the solutions in list_comprehensions/src/list_comprehensions.py from lists: list comprehensions
1def a_for_loop(a_container):
2 result = []
3 for stuff in a_container:
4 result.append(stuff)
5 return result
6
7
8def a_list_comprehension(a_collection):
9 return [element for element in a_collection]
10
11
12def is_even(number):
13 return number % 2 == 0
14
15
16def get_even_numbers(numbers):
17 return [number for number in numbers if is_even(number)]
18
19
20def get_odd_numbers(numbers):
21 return [number for number in numbers if not is_even(number)]
22
23
24def square(numbers):
25 return [number**2 for number in numbers]