3

我有 2 个不同的代码:

def bar(a):
    return [ x**3 for x in a ]

def cube(a):
    for x in a:
        return x**3

如果我将 bar(a) 定义为 ([1, 2, 3, 4]),我的输出将是 [1, 8, 27, 64]。如果我将 cube(a) 定义为 ([1, 2, 3, 4]),我的输出只是 1。这是为什么呢?他们不应该给出相同的输出吗?“for x in a”不意味着对 a 中的每个 x 进行以下迭代吗?

4

3 回答 3

5

在循环内返回不会创建列表,它只是返回一个值,中止循环。您的第一个示例可以正常工作,因为它是一个列表理解——它创建一个列表并返回它。

于 2013-10-19T03:38:01.773 回答
3

这是因为你return在第二种情况下从 for 循环的第一次迭代开始。

在第一种情况下,您使用列表推导

def bar(a):
    return [ x**3 for x in a ]

你建立一个立方体列表并返回它,而在第二种情况下

def cube(a):
    for x in a:
        return x**3

您开始迭代列表,但在第一次迭代本身中从函数返回。

一种等效的使用for x in a方式是

def cube(a):
    final = []
    for x in a:
        final.append(x**3)
    return final
于 2013-10-19T03:37:47.697 回答
2

合适的第二个版本实际上是:

def cube(a):
    li = []
    for x in a:
        li.append(x**3)
    return li

而不是你所拥有的。您应该返回项目列表,您的版本将简单地返回循环中的第一个输出项目。

更压缩的形式:

cube = lambda a: [x**3 for x in a]

事实上,如果您不多次使用它,您可以直接使用列表综合/生成器语法。

于 2013-10-19T03:40:25.673 回答