私はfunction_iterate_over_arrayという以下の関数を持っています。この関数は、配列と関数名のリストを取ります。関数は機能しますが、同じ結果を達成する関数を作成する必要がありますが、任意の数のfunction_namesを取り込むことができます。配列内のアイテム内の任意の数の関数に対して反復処理を行う関数を作成するにはどうすればよいですか?
例えば、以下の機能が、私は任意の数の機能を取ることができfunction_iterate_over_arrayよりも優れた機能と同じ結果を達成したい4人のファンクション名
from operator import itemgetter
from itertools import groupby
from dictionary_functions import DictionaryFunctions
group_func = lambda iterable,key: [list(group) for key, group in groupby(sorted(iterable, key=itemgetter(key)), itemgetter(key))]
def add_one(i):
return i + 1
def subtract_one(i):
return i - 1
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':subtract_one,'f2':subtract_one,'f3':subtract_one,'f4':subtract_one},
{'f1':subtract_one,'f2':add_one,'f3':add_one,'f4':add_one}]
functions = ['f1','f2','f3','f4']
def function_iterate_over_array(array,functions,starting_value=0):
L = []
function_key_name = functions[0]
grouped_array = group_func(array,function_key_name)
for grouped_array_item in grouped_array:
function_one = grouped_array_item[0][function_key_name]
function_one_result = function_one(starting_value)
function_two_name = functions[1]
sub_grouped_array = group_func(grouped_array_item,function_two_name)
for sub_grouped_array_item in sub_grouped_array:
function_two = sub_grouped_array_item[0][function_two_name]
function_two_result = function_two(function_one_result)
function_three_name = functions[2]
sub_sub_grouped_array = group_func(sub_grouped_array_item,function_three_name)
for sub_sub_grouped_array_item in sub_sub_grouped_array:
function_three = sub_sub_grouped_array_item[0][function_three_name]
function_three_result = function_three(function_two_result)
function_four_name = functions[3]
sub_sub_sub_grouped_array = group_func(sub_sub_grouped_array_item,function_four_name)
for sub_sub_sub_grouped_array_item in sub_sub_sub_grouped_array:
function_four = sub_sub_sub_grouped_array_item[0][function_four_name]
function_four_result = function_four(function_three_result)
for dictionary_from_array in sub_sub_sub_grouped_array_item:
D = dict(dictionary_from_array.items()+{'result':function_four_result}.items())
L.append(D)
return L
L = function_iterate_over_array(array,functions)
#-->[{'f1': <function add_one at 0x1006d5cf8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 4}, {'f1': <function add_one at 0x1006d5cf8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 4}, {'f1': <function subtract_one at 0x100763ed8>, 'f2': <function add_one at 0x1006d5cf8>, 'f3': <function add_one at 0x1006d5cf8>, 'f4': <function add_one at 0x1006d5cf8>, 'result': 2}, {'f1': <function subtract_one at 0x100763ed8>, 'f2': <function subtract_one at 0x100763ed8>, 'f3': <function subtract_one at 0x100763ed8>, 'f4': <function subtract_one at 0x100763ed8>, 'result': -4}]
に取る必要があります。例えば、私は仕事に次のようにしたい:
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one},
{'f1':subtract_one,'f2':subtract_one,'f3':subtract_one,'f4':subtract_one},
{'f1':subtract_one,'f2':add_one,'f3':add_one,'f4':add_one}]
function_iterate_over_array(array,['f1','f2'])
function_iterate_over_array(配列、[ 'F1'、 'f2は'])以下を返す必要があります:
私は変更することによって達成[{'f1': <function add_one at 0x101a0fcf8>, 'f2': <function add_one at 0x101a0fcf8>, 'f3': <function add_one at 0x101a0fcf8>, 'f4': <function add_one at 0x101a0fcf8>, 'f5': <function add_one at 0x101a0fcf8>, 'result': 2}, {'f1': <function add_one at 0x101a0fcf8>, 'f2': <function add_one at 0x101a0fcf8>, 'f3': <function add_one at 0x101a0fcf8>, 'f4': <function add_one at 0x101a0fcf8>, 'f5': <function add_one at 0x101a0fcf8>, 'result': 2}]
次へfunction_iterate_over_array:
def function_iterate_over_array(array,functions,starting_value=0):
L = []
function_key_name = functions[0]
grouped_array = group_func(array,function_key_name)
for grouped_array_item in grouped_array:
function_one = grouped_array_item[0][function_key_name]
function_one_result = function_one(starting_value)
function_two_name = functions[1]
sub_grouped_array = group_func(grouped_array_item,function_two_name)
for sub_grouped_array_item in sub_grouped_array:
function_two = sub_grouped_array_item[0][function_two_name]
function_two_result = function_two(function_one_result)
for dictionary_from_array in sub_grouped_array_item:
D = dict(dictionary_from_array.items()+{'result':function_two_result}.items())
L.append(D)
return L
私も次のよう
array = [{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one,'f5':add_one},
{'f1':add_one,'f2':add_one,'f3':add_one,'f4':add_one,'f5':add_one}]
functions = ['f1','f2','f3','f4','f5']
function_iterate_over_array(array,functions)
0123を動作するようにしたいです
特に私は上記の関数を書くことにより、任意の数の関数を使うことができるようにするより良い方法を探しています。
これらの関数では何を達成したいですか? 'function_iterate_over_array(array、['f1'、 'f2'])の出力はどうすればよいですか? –
良い点 - これらの詳細を追加するために私の質問を更新しました。 – Chris
概念的には、この関数の目的は何ですか? – Quelklef