data structures: List Comprehensions: tests and solutions

tests

the code in tests/test_list_comprehensions.py from lists: list comprehensions

import random
import src.list_comprehensions
import unittest


def process(number):
    return number ** 2


def condition(number):
    return number % 2 == 0


class TestListComprehensions(unittest.TestCase):

    def setUp(self):
        self.a_list = []
        self.iterable = range(0, random.randint(2, 1000))

    def test_making_a_list_w_a_for_loop(self):
        for item in self.iterable:
            self.a_list.append(item)

        self.assertEqual(self.a_list, list(self.iterable))
        self.assertEqual(
            src.list_comprehensions.for_loop(self.iterable),
            self.a_list
        )

    def test_making_a_list_w_extend(self):
        self.assertIsNone(self.a_list.extend(self.iterable))
        self.assertEqual(self.a_list, list(self.iterable))

    def test_making_a_list_w_a_list_comprehension(self):
        self.assertEqual(
            list(self.iterable),
            [item for item in self.iterable]
        )
        self.assertEqual(
            src.list_comprehensions.list_comprehension(self.iterable),
            [item for item in self.iterable]
        )

    def test_making_a_list_w_conditions(self):
        even_numbers, odd_numbers = [], []
        for item in self.iterable:
            if condition(item):
                even_numbers.append(item)
            else:
                odd_numbers.append(item)

        self.assertEqual(
            even_numbers,
            [item for item in self.iterable if condition(item)]
        )
        self.assertEqual(
            src.list_comprehensions.get_even_numbers(self.iterable),
            [item for item in self.iterable if condition(item)]
        )
        self.assertEqual(
            odd_numbers,
            [item for item in self.iterable if not condition(item)]
        )
        self.assertEqual(
            src.list_comprehensions.get_odd_numbers(self.iterable),
            [item for item in self.iterable if not condition(item)]
        )

    def test_making_a_list_w_processes(self):
        square_numbers = []
        for item in self.iterable:
            square_numbers.append(process(item))

        self.assertEqual(
            square_numbers,
            [process(item) for item in self.iterable]
        )
        self.assertEqual(
            src.list_comprehensions.square(self.iterable),
            [process(item) for item in self.iterable]
        )

    def test_making_a_list_w_processes_and_conditions(self):
        even_squares, odd_squares = [], []
        for item in self.iterable:
            if condition(item):
                even_squares.append(process(item))
            else:
                odd_squares.append(process(item))

        self.assertEqual(
            even_squares,
            [process(item) for item in self.iterable if condition(item)]
        )
        self.assertEqual(
            odd_squares,
            [process(item) for item in self.iterable if not condition(item)]
        )


# Exceptions Encountered
# AssertionError
# NameError
# AttributeError

solutions

the solutions in list_comprehensions.py from lists: list comprehensions

def for_loop(iterable):
    result = []
    for item in iterable:
        result.append(item)
    return result


def list_comprehension(iterable):
    return [item for item in iterable]


def is_even(number):
    return number % 2 == 0


def get_even_numbers(iterable):
    return [number for number in iterable if is_even(number)]


def get_odd_numbers(iterable):
    return [number for number in iterable if not is_even(number)]


def square(iterable):
    return [number**2 for number in iterable]