我已经尝试寻找这个问题的答案,并阅读了很多关于装饰器和全局变量的内容,但没有找到任何与手头的问题完全合乎情理的东西:我想N
使用A
-alphabet,来制作 -length 的每一个排列fxn(A,N)
。我将传递函数 2 个参数:A
和N
. 它将产生长度的虚拟结果N
。然后,使用N
嵌套for
循环,它将使用A
从最内层循环开始的每个元素更新结果的每个索引。所以用fxn(‘01’,4)
它会产生
1111, 1110, 1101, 1100, 1011, 1010, 1001, 1000,
0111, 0110, 0101, 0100, 0011, 0010, 0001, 0000
如果您知道需要多少个嵌套循环(N
; 虽然超过 4 个它开始变得非常混乱和麻烦),那么这样做很简单。但是,如果您想使用 A 制作所有任意长度的序列,那么您需要一些方法来自动化这种循环行为。特别是,我还希望此函数充当生成器,以防止必须将所有这些值存储在内存中,例如使用列表。要开始它需要初始化第一个循环,并使用单个值更改(要更新的索引)N-1
次来继续初始化嵌套循环。然后它将产生最内层循环的值。
直接的方法fxn('01',4)
是:
for i in alphabet:
tempresult[0] = i
for i in alphabet:
tempresult[1] = i
for i in alphabet:
tempresult[2] = i
for i in alphabet:
tempresult[3] = i
yield tempresult
基本上,我怎样才能将它扩展到任意长度的列表或字符串,并且仍然让每个嵌套循环更新适当的索引。我知道作为 numpy 的一部分可能有一个置换函数可以做到这一点,但我还没有遇到过。任何意见,将不胜感激。