Python 使用递归函数或其他方法简化嵌套 for 循环
Python simplifying nested for loops using recursive function or other methods
我想简化以下代码:
import numpy as np
interval = 20
wgt = list(np.arange(0, 101, interval))
pairs = []
for a in wgt:
for b in list(np.arange(0, 101-a, interval)):
for c in list(np.arange(0, 101-a-b, interval)):
for d in list(np.arange(0, 101-a-b-c, interval)):
for e in list(np.arange(0, 101-a-b-c-d, interval)):
for f in list(np.arange(0, 101-a-b-c-d-e, interval)):
for g in list(np.arange(0, 101-a-b-c-d-e-f, interval)):
for h in list(np.arange(0, 101-a-b-c-d-e-f-g, interval)):
for i in list(np.arange(0, 101-a-b-c-d-e-f-g-h, interval)):
j = 100-a-b-c-d-e-f-g-h-i
pairs.append([a,b,c,d,e,f,g,h,i,j])
最终,我想获得重复for循环N次的对。 pairs[]的列数随着循环次数的增加而增加
有人可以简化上面的代码吗?我知道一种可能的解决方案是使用递归函数,但这对初学者来说太具有挑战性了。我不在乎你的代码是否包含其他方法或语法,只要它能简化代码即可。
提前致谢!
解决方案是以下递归函数:
def foo(n, wgt, s):
if n==1:
return [[100-s]]
pairs = []
for w in wgt:
if s+w > 100: continue
for t in f(n-1, wgt, s+w):
pairs.append([w] + t)
return pairs
您可以生成所需的 pairs
列表:
import numpy as np
interval = 20
wgt = np.arange(0, 101, interval)
N = 10
pairs = foo(N, wgt, 0)
我想简化以下代码:
import numpy as np
interval = 20
wgt = list(np.arange(0, 101, interval))
pairs = []
for a in wgt:
for b in list(np.arange(0, 101-a, interval)):
for c in list(np.arange(0, 101-a-b, interval)):
for d in list(np.arange(0, 101-a-b-c, interval)):
for e in list(np.arange(0, 101-a-b-c-d, interval)):
for f in list(np.arange(0, 101-a-b-c-d-e, interval)):
for g in list(np.arange(0, 101-a-b-c-d-e-f, interval)):
for h in list(np.arange(0, 101-a-b-c-d-e-f-g, interval)):
for i in list(np.arange(0, 101-a-b-c-d-e-f-g-h, interval)):
j = 100-a-b-c-d-e-f-g-h-i
pairs.append([a,b,c,d,e,f,g,h,i,j])
最终,我想获得重复for循环N次的对。 pairs[]的列数随着循环次数的增加而增加
有人可以简化上面的代码吗?我知道一种可能的解决方案是使用递归函数,但这对初学者来说太具有挑战性了。我不在乎你的代码是否包含其他方法或语法,只要它能简化代码即可。
提前致谢!
解决方案是以下递归函数:
def foo(n, wgt, s):
if n==1:
return [[100-s]]
pairs = []
for w in wgt:
if s+w > 100: continue
for t in f(n-1, wgt, s+w):
pairs.append([w] + t)
return pairs
您可以生成所需的 pairs
列表:
import numpy as np
interval = 20
wgt = np.arange(0, 101, interval)
N = 10
pairs = foo(N, wgt, 0)