Skip to content

Instantly share code, notes, and snippets.

@jan-matejka
Last active December 16, 2015 03:39
Show Gist options
  • Select an option

  • Save jan-matejka/5371369 to your computer and use it in GitHub Desktop.

Select an option

Save jan-matejka/5371369 to your computer and use it in GitHub Desktop.
what am I missing?
#! /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