如何单独返回完整的数组列表?

时间:2016-02-19 05:03:57

标签: python arrays return

我在这里有一个名为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]

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

2 个答案:

答案 0 :(得分:3)

当你的函数遇到一个return语句时,它返回for good。将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)))

答案 1 :(得分:1)

return语句会立即终止该函数并返回给调用者。在你的情况下,这意味着它永远不会进入第二次循环迭代。

而不是for循环:

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

尝试使用list comprehension构建数组:

return [np.array(p) for p in it.permutations(factors(x))]