2017-10-11 11 views
1

私はしばらくこのことに固執しており、この機能をどのようにしてワンライナーに変えることができないのか分かりません。私はそれも標準のforループで行うことができることを認識していますが、私はそうしたくありません。これはリストの理解やラムダで行うことができますか?

def set_num_children(individs): 
    avg_fitness = calc_avg_fitness(individs) 
    def calculation(individ): 
     individ[2] = round(individ[1]/avg_fitness) 
     return individ 

    return map(calculation, individs) 
+2

'calc_avg_fitness()はどこに定義されていますか? –

+2

変数の種類は何ですか? – percusse

+0

なぜ 'map'に突然変異関数を使用していますか? – user2357112

答えて

0

確かに、[(individ[0], individ[1], round(individ[1]/avg_fitness)) for individ in individs]はリテラルの翻訳になります。しかし、少しでもそれをきれいにするかもしれない。

+0

'calculation()'は2番目の要素を返さない –

+0

Heh、編集ボタンに私を打ち負かしました;-) – coderanger

+0

また、それ以上の要素や要素の可変数、その他のものがないと仮定します。与えられた例から伝えるのが難しい。 – coderanger

1

これはそれを得ることができる限り近い:

avg_fitness = calc_avg_fitness(individs) 
[[x[0], x[1], round(x[1]/avg_fitness)] for x in individs] 

インラインcalc_avg_fitnessへの呼び出しは、我々はいけない、私たちが、それはよりそれ以上を計算しても意味がありませんでしたにもかかわらず一度...これは非効率的である:

[[x[0], x[1], round(x[1]/calc_avg_fitness(individs))] for x in individs] 

いずれかの方法で、私たちは、第三は、必要な計算された状態で、三要素のリストである「individs」、のリストを返します。

関連する問題