2017-10-11 38 views
1

我一直在这一段时间卡住了,并且无法弄清楚如何将这个函数转换为一行代码。我知道它也可以通过标准的for-loop来完成,但我不想这样做。这可以通过列表理解或lambda来完成吗?

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

'计算()'不返回第二个元素 –

+0

呵呵,你把我打到编辑按钮;-) – 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”,这是与第三个就是需要计算的三元素列表的列表。