【问题标题】:How to implement a for loop inside a for loop inside a for loop?如何在for循环内的for循环内实现for循环?
【发布时间】:2021-10-28 08:30:22
【问题描述】:

我有两个变量 (n;p) 在两个独立的方程中,一个找到 C,另一个找到 T。对于第一次迭代,我假设 np 的值找到 CT,现在我必须找到将构成 C=T 的所有 np 对。 除了用作常数之外,n 将定义第一个等式中列表的范围,C 是该列表中所有值的总和。

我能够编写第一次迭代,将 np 定义为常量,从而找到 CT 彼此不相等,但我不知道如何对整个过程进行编程,以便它会重复一组 p (这将是一个列表而不是常量)并找到使 C=Tn。我必须遍历 p 并为每个找到一个满足条件的 n 。 因此,我需要在 for 循环 内的 for 循环 内创建一个 for 循环。它会是这样的:

for all the values of p in range (0, 12, 0.1) do:
     for all the values of n in range(0, 160, 0.001) do:
             "the rest of the operation that also has for loop in it"

那个操作会产生CT,那么,

if C = T
print(p and n)  # the pair (p;n) that made it possible

正如您所见,这是一个想法,而不是实际代码,我不知道如何为它编写实际代码。我看到了一些关于 zip 功能的东西,但还是不明白。帮助。

【问题讨论】:

  • 问题描述太抽象,很难帮到你,但我认为你需要遵循一个教程,确保你了解基础知识。

标签: python loops equality equation


【解决方案1】:

我通过尝试阐明问题(并进行一些研究)来弄清楚:

p = np.arange(0.1, 12.1, 0.1)  
for k in range(0, p.size):
# this will evaluate the next "for loop" (iterate with k) for all the values of p
    n = np.arange(0, 160, 0.002)
    for j in range(0, n.size):
    # this will evaluate the next "for loop" (iterate with j) for all the values of n  
        # the next for loop uses "i" to iterate other operations not relevant for 
        # this problem right now

在使用“j”的“for循环”内部,最后,我需要比较C和T的结果,看看它们是否相等(或尽可能相等),然后打印np 让这成为可能。

我仍然需要处理这部分代码,但比较它的一种简单方法可能是:

        comparison_parameter = 1
        comparison = T - C
        if comparison_parameter > comparison > -comparison_parameter:
            print('For p = ', round(p[k], 1), ', n =', round(n[j], 4))
        else:
            pass

这绝对不是完成这一切的最优雅的方式,这里有一些我建议改进的代码问题:

  • 我使用的是列表而不是生成器,因此 python 会将每个计算都存储在内存中

  • 我没有使用“assertAlmostEqual() 函数”来比较 C 和 T (https://www.geeksforgeeks.org/python-unittest-assertalmostequal-function/)

  • 我的方式给了我满足特定comparison_parameter 条件的多个 n 值(给定某个 p),但我只希望一个对应的comparison 最接近 0,这意味着 CT 将彼此更接近。

【讨论】:

  • 您可以只使用for p in np.arrange(...) 而不是使用p[k]。对于内部,尝试if abs(T - C) < 1else: pass 没有任何作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 2015-11-12
  • 1970-01-01
  • 2019-11-10
  • 2015-07-02
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多