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 condition(number):
return number % 2 == 0
def process(number):
return number * number
class TestListComprehensions(unittest.TestCase):
def setUp(self):
self.iterable = range(random.randint(1, 1000))
def test_make_a_list_w_a_for_loop(self):
a_list = []
for item in self.iterable:
a_list.append(item)
self.assertEqual(a_list, list(self.iterable))
self.assertEqual(
src.list_comprehensions.for_loop(self.iterable),
list(self.iterable)
)
def test_make_a_list_w_list_comprehensions(self):
self.assertEqual(
src.list_comprehensions.for_loop(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_list_comprehensions_w_conditions_i(self):
even_numbers = []
for item in self.iterable:
if condition(item):
even_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)]
)
def test_list_comprehensions_w_conditions_ii(self):
odd_numbers = []
for item in self.iterable:
if not condition(item):
odd_numbers.append(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_list_comprehensions_w_functions(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.get_square_numbers(self.iterable),
[process(item) for item in self.iterable]
)
# 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 [item for item in iterable if is_even(item)]
def get_odd_numbers(iterable):
return [item for item in iterable if not is_even(item)]