我想以另一种方式重写get_bs函数,如何以更紧凑的方式改进此嵌套的for循环?有什么建议么?
我当时在想,可以将嵌套循环分成两个不同的嵌套循环,每个循环写在一行中,例如因为我,我... 这可能吗?有人可以告诉我吗?谢谢。
ActiveAdmin.register SupportSession do
belongs_to :service_user
答案 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)
也许没有人敢回答您在修改代码时不应该总是走得更远,尤其是在代码工作时。最重要的软件通常由于重复而难以编辑。只需改善功能或切换到新软件即可。