我如何改善此嵌套的for循环?

时间:2019-06-28 23:34:53

标签: python

我想以另一种方式重写get_bs函数,如何以更紧凑的方式改进此嵌套的for循环?有什么建议么?

我当时在想,可以将嵌套循环分成两个不同的嵌套循环,每个循环写在一行中,例如因为我,我... 这可能吗?有人可以告诉我吗?谢谢。

ActiveAdmin.register SupportSession do
  belongs_to :service_user

2 个答案:

答案 0 :(得分:0)

自从您在评论中问我如何做...

使用itertools在单行代码中获取嵌套循环的i,j索引:

import itertools

for i, j in itertools.product(range(self.num_elements - 1),
                              range(self.num_diabetesyes)):
    diff_yes = self.diabetes_yes[i][j] - self.a_diabetesyes[i]
    sigSumYes[i] += m.pow(diff_yes, 2)

    diff_no = self.diabetes_no[i][j] - self.a_diabetesno[i]
    sigSumNo[i] += m.pow(diff_no, 2)

之后,为仅在i上迭代的部分创建一个单独的for循环。

for i in range(self.num_elements - 1):
    self.b_diabetesyes[i] = m.sqrt(sigSumYes[i] / (len(self.diabetes_yes[i]) - 1))
    self.b_diabetesno[i] = m.sqrt(sigSumNo[i] / (len(self.diabetes_no[i]) - 1))

请注意,我认为这不是最好的方法。使用Numpy和向量数学将更快,更优雅。

通常,“无库”规则指的是“不要使用要求您实现的算法的现成实现”。不是“不要使用任何外部便利类”。

答案 1 :(得分:-2)

也许没有人敢回答您在修改代码时不应该总是走得更远,尤其是在代码工作时。最重要的软件通常由于重复而难以编辑。只需改善功能或切换到新软件即可。