对于循环清晰度

时间:2013-10-19 03:33:54

标签: python for-loop

我有两个不同的代码:

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 a in a”对于a中的每个x都意味着进行下一次迭代吗?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

这是因为你在第二种情况下从for循环的第一次迭代中得到return

在第一种情况下,您使用列表理解

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

答案 2 :(得分:2)

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

def cube(a):
    li = []
    for x in a:
        li.append(x**3)
    return li
而不是你拥有的。您应该返回项目列表,您的版本将只返回循环中的第一个输出项目。

更加压缩的形式:

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

事实上,如果你不多次使用它,你可以直接使用list comprehesions / generator语法。