這個問題在這里已經有了答案: 可變長度嵌套回圈 Python (1 個回答) 16 小時前關閉。
我想創建一個函式,它的行為方式與那里的 for 回圈相同,取決??于變數 n:
function(n, max_anz, max_size_ , step)
n = 1
z = 0
for a1 in range(max_anz 1):
for x1 in range(0, max_size, step):
print([a1, x1])
z = 1
print(z)
n = 2
z = 0
for a1 in range(max_anz 1):
for x1 in range(0, max_size, step):
for a2 in range(max_anz 1):
for x2 in range(0, max_size, step):
print([a1, x1, a2, x2])
z = z 1
print(z)
n = 3
z = 0
for a1 in range(max_anz 1):
for x1 in range(0, max_size, step):
for a2 in range(max_anz 1):
for x2 in range(0, max_size, step):
for a3 in range(max_anz 1):
for x3 in range(0, max_size, step):
print([a1, x1, a2, x2, a3, x3])
z = z 1
列印(z)
uj5u.com熱心網友回復:
使用帶有“重復”引數的 itertools.product。
import itertools as it
def function(n, max_anz, max_size, step):
lst = [list(e) for e in it.product(range(max_anz 1), range(0, max_size, step), repeat = n)]
print(*lst, sep='\n')
print(len(lst))
或者使用生成器來防止構建完整串列:
def function(n, max_anz, max_size, step):
g = it.product(range(max_anz 1), range(0, max_size, step), repeat = n)
i = 0
for e in g:
i = 1
print(list(e))
print(i)
可以縮短:
def function(n, max_anz, max_size, step):
i = 0
for e it.product(range(max_anz 1), range(0, max_size, step), repeat = n):
i = 1
print(list(e))
print(i)
uj5u.com熱心網友回復:
您可以使用遞回執行您想要的操作,使用一個函式呼叫自身n-1(如果n大于一)并傳入一些部分結果以進行構建。
下面的代碼片段在一個更簡單的問題上演示了這種方法for,每個級別只有一個回圈n。
def make_list(n, limit, context=None):
z = 0
for val in range(limit):
new_list = [] if context is None \
else context.copy()
new_list.append(val)
if n > 1:
z = make_list(n-1, limit, context=new_list)
else:
print(new_list)
z = 1
return z
make_list(2, 3)
# [0, 0]
# [0, 1]
# [0, 2]
# [1, 0]
# [1, 1]
# [1, 2]
# [2, 0]
# [2, 1]
# [2, 2]
# Out[10]: 9
uj5u.com熱心網友回復:
itertools.product是 python 中的首選解決方案,但作為程式員,您不應該坐在那里等待功能以您選擇的語言或庫出現。例如,如果您要將這個問題帶到 JavaScript 中,您會怎么做?
您注意到一個模式,因此將其包裝在一個函式中并定義必要的引數。使用簡單的歸納推理,我們可以建構式——
- 如果
n小于或等于零,不再回圈,產生空結果 - (inductive)
n是 1 或更大。運行回圈,并為每個結果r的子問題n-1,前插a和x與結果
def myfunc(n, max_anz, max_size, step):
if n <= 0:
yield () #1
else:
for a in range(max_anz 1): #2
for x in range(0, max_size, step):
for r in myfunc(n - 1, max_anz, max_size, step):
yield (a, x, *r)
現在你可以myfunc用你的引數呼叫 -
for r in myfunc(2, 3, 4, 1):
print(r)
(0, 0, 0, 0)
(0, 0, 0, 1)
(0, 0, 0, 2)
...
(3, 3, 3, 1)
(3, 3, 3, 2)
(3, 3, 3, 3)
list如果您愿意,您可以在 a 中收集所有組合,其中len為您提供組合的總數(z在您的問題中)-
result = list(myfunc(2, 3, 4, 1))
print(result)
print(len(result))
[
(0, 0, 0, 0),
(0, 0, 0, 1),
(0, 0, 0, 2),
...,
(3, 3, 3, 1),
(3, 3, 3, 2),
(3, 3, 3, 3)
]
256
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368664.html
上一篇:用于Diffable資料源的ObjectiveCHashable物件
下一篇:C :不同類初始化后變數改變值
