Десислава обнови решението на 14.03.2013 23:25 (преди над 11 години)
+import functools
+
+#groupby
+def groupby (func, seq):
+ return {i: list(filter(lambda x: func(seq[x]) == i, seq)) for i in list(map(func, seq))}
+
+#iterate
+def iterate(func):
+ def help_func(arg, _help=1):
+ for i in range(_help):
+ arg = func(arg)
+ return arg
+ count = 0
+ while True:
+ yield functools.partial(help_func, _help=count)
+ count += 1
+
+#zip_with
+def zip_with(func, *iterables):
+ for itr in zip(*iterables):
+ yield func(*itr)
+
+#cache
+def cache(func, cache_size):
+ cached_args_list = []
+ cached_results_list = []
+ def func_cached(*args):
+ if cache_size > 0:
+ if args not in cached_args_list:
+ cached_args_list.append(args)
+ cached_results_list.append(func(*args))
+ if len(cached_args_list) > cache_size:
+ cached_args_list.pop(0)
+ cached_results_list.pop(0)
+ return cached_results_list[cached_args_list.index(args)]
+ else:
+ return func(*args)
+ return func_cached
Сещам за няколко случая, в които groupby
ще гърми с list index out of range
. Каква е точно идеята на тези коментари? :)