我这里有一个称为factors的函数,用于定义第二个函数permutations。第一个factors在这里:

def factors(x):
    factors = []
    for x in range(1,x+1):
        factors.append(x)
    return factors


我在其中使用因子的下一段代码是:

import itertools as it

def permutations(x):
    for p in it.permutations(factors(x)):
        return(np.array(p))


当我尝试运行permutations(3)时,它返回:

array([1 2 3])

我似乎无法返回所有行,而只是获取数组的第一行。我尝试打印它,然后打印作品:

import itertools as it

for p in it.permutations(factors(3)):
    print(np.array(p))


返回:

[1 2 3]
[1 3 2]
[2 1 3]
[2 3 1]
[3 1 2]
[3 2 1]


我认为这与返回的方式有关,因为我只要求第一个数组,而不是以某种方式迭代它以显示所有数组。我希望它返回所有数组作为返回给我的函数。

最佳答案

当您的函数遇到return语句时,它将永远返回。将return更改为yield以生成一个生成器:

def permutations(x):
    for p in it.permutations(factors(x)):
        yield np.array(p)


演示:

>>> list(permutations(3))
[array([1, 2, 3]), array([1, 3, 2]), array([2, 1, 3]), array([2, 3, 1]), array([3, 1, 2]), array([3, 2, 1])]


另一件事:您的factors函数毫无意义。您可以使用range来完成相同的操作,例如:

>>> range(1, 5)
[1, 2, 3, 4]


所以线

for p in it.permutations(factors(x)):


应该写成

for p in it.permutations(range(1, x+1)):


最后,如果您使用的是Python 3.3或更高版本,则可以使用yield from语法:

def permutations(x):
    yield from map(np.array, it.permutations(range(1, x+1)))

关于python - 如何分别返回完整的数组列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35497684/

10-10 00:27
查看更多