Last active
December 16, 2015 03:39
-
-
Save jan-matejka/5371369 to your computer and use it in GitHub Desktop.
what am I missing?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #! /usr/bin/env python | |
| from itertools import chain | |
| from functools import partial | |
| from nose.tools import ok_, eq_ | |
| def flatMap1(m, f): | |
| m = [f(i) for i in m if f(i)] | |
| return reduce(lambda acc,n: acc + n, m, []) | |
| def flatMap2(m, f): | |
| return list(chain(*map(f, m))) | |
| def flatMap3(m, f): | |
| return sum(map(f, m), []) | |
| def f(x): | |
| try: | |
| return [int(x)] | |
| except: | |
| return [] | |
| def f2(x): | |
| try: | |
| return int(x) | |
| except: | |
| return None | |
| # something | |
| class MList(list): | |
| def __init__(self, l): | |
| if not isinstance(l, list): | |
| l = [l] | |
| super(MList, self).__init__(l) | |
| def map(self, f): | |
| return self.flatMap(lambda x: self.__class__(f(x))) | |
| def flatten(self): | |
| return self.flatMap(lambda x: x) | |
| def flatMap(self, f): | |
| l = [] | |
| for i in self: | |
| x = f(i) | |
| if x: | |
| l.append(x[0]) | |
| return l | |
| eq_(MList([1,2,3]), [1,2,3]) | |
| ######################################################################### | |
| m = ["1","2a","3"] | |
| result = [1, 3] | |
| eq_(map(f, m), [[1], [], [3]]) | |
| for i in [flatMap1, flatMap2, flatMap3]: | |
| try: | |
| eq_(i(m, f) , result) | |
| except AssertionError as e: | |
| import traceback | |
| print i | |
| print traceback.format_exc() | |
| try: | |
| eq_(MList(m).flatMap(f), result) | |
| except: | |
| import traceback | |
| print MList.flatMap | |
| print traceback.format_exc() | |
| try: | |
| eq_(MList(m).map(f2), [1, None, 3]) | |
| except: | |
| import traceback | |
| print MList.map | |
| print traceback.format_exc() | |
| try: | |
| eq_(MList([[1], [], [3]]).flatten(), [1, 3]) | |
| except: | |
| import traceback | |
| print MList.map | |
| print traceback.format_exc() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment