Йордан обнови решението на 12.03.2013 19:04 (преди над 11 години)
+from functools import reduce, lru_cache
+
+
+def groupby(func, seq):
+ res = reduce(lambda group, item: group.setdefault(func(item), [])
+ .append(item) or group, (item for item in seq), {})
+ return res
+
+
+def iterate(func):
+ count = 0
+
+ def wrapper(*args, **kwargs):
+ if not count:
+ return args[0]
+ else:
+ res = func(*args, **kwargs)
+ for _ in range(1, count):
+ res = func(res)
+ return res
+
+ while True:
+ yield wrapper
+ count += 1
+
+
+def zip_with(func, *iterables):
+ min_iter_length = len(min(iterables)) if iterables else 0
+
+ for i in range(min_iter_length):
+ res = func(*(iterable[i] for iterable in iterables))
+ yield res
+
+
+def cache(func, cache_size):
+ @lru_cache(cache_size)
+ def wrapper(*args, **kwargs):
+ return func(*args, **kwargs)
+
+ return wrapper
Можеш ли да се сетиш за iterable
колекция, върху която не можеш да извикаш min
?
iterate
не ми харесва и може да се издъни в някои ситуации. Отдели му време
Идеята беше да си напишете кеш, не да ползвате този от functools. ;)