【发布时间】:2018-07-13 02:57:01
【问题描述】:
我正在使用 python 列表作为以下代码:
x=[0.1,0.1,0.1]
dx=0.1
R=1
while x[0] < R:
while x[1] < R:
if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) < R:
x[2] = x[2] + dx
counter = counter + 1
else:
x[1] = x[1] + dx
x[0]= dx
print(counter)
x[0] = x[0] + dx
x[1] = dx
但对于更大的列表,例如:
x=[0.1,0.1,0.1,0.1]
dx=0.1
#we have to add another while loop
while x[0]<R:
while x[1]<R:
while x[2]<R:
if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) < R:
x[3] = x[3] + dx
counter = counter + 1
else:
x[2] = x[2] + dx
x[1]= dx
x[1] = x[1] + dx
x[2] = dx
x[0]=x[0]+dx
x[1]=dx
等等 我想要做的是找到一种方法来为任意数量的元素的任何列表实现此代码(一般情况) 但我不知道如何将这些 while 循环转换为任意数量的维度(数组中的元素数量)
以防万一这段代码会执行以下操作:
example: for dx=0.1 and R=1 and we start with 0.1
start with x=[0.1, 0.1, 0.1] (after the first loop) x=[0.9, 0.1, 0.1] And then [0.1, 0.2, 0.1] And so on until [0.9, 0.9, 0.1] After we will get [0.1,0.1,0.2] And we will start again with [0.2, 0.1, 0.2] and so on
任何帮助将不胜感激
【问题讨论】:
-
您能先解释一下您打算做什么吗? 通常,当您的代码中有超过 2 个嵌套循环时,有一种更好的方式来组织您的代码。
-
乍一看,这看起来像是一个非常简单的递归函数。
-
也就是说,
if np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2) < R:行在两种情况下是否相同? -
示例:对于 dx=0.1 和 R=1,我们从 0.1 开始,这就是我想要做的:从 x=[0.1, 0.1, 0.1] 开始(在第一个循环之后)x =[0.9, 0.1, 0.1] 然后是 [0.1, 0.2, 0.1] 以此类推直到 [0.9, 0.9, 0.1] 之后我们将得到 [0.1,0.1,0.2] 并且我们将从 [0.2, 0.1, 0.2] 等等
-
Grokking 涉及更多地关注问题空间(而不是 Python 语法/逻辑/最佳实践),而不是我愿意在早上的这个时候免费提供。您能否将问题集中在 Python 方面,隔离出数学/逻辑?
标签: python list loops numpy while-loop