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]