我有两个不同的代码:
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都意味着进行下一次迭代吗?
答案 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语法。