是否可以在for循环行中直接添加“列表推导”?当前代码:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: in file /var/www/html/oit_laravel1/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php on line 255
Stack trace:
1. Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException->() ...
我想编写类似的代码(这显然行不通):
cubes = [i**3 for i in range(5)]
for value in cubes:
print(value)
或
for value in cubes = [i**3 for i in range(5)]:
print(value)
答案 0 :(得分:1)
您可以直接将表达式直接放入循环中
for value in [i**3 for i in range(5)]:
print(value)
输出:
0
1
8
27
64
答案 1 :(得分:0)
如果您希望列表cubes
都在代码中稍后出现并要打印,则可以利用print
返回None
的事实来完成列表理解中的所有操作: / p>
cubes = [print(i**3) or i**3 for i in range(5)]
这是推荐的吗?没有!显然违反了"The Zen of Python" (PEP20)。
答案 2 :(得分:0)
如果您的n
的{{1}}足够大,则对循环使用列表理解将在其开始之前就挂起。您可能想使用range
来抽象出循环过滤:
yield
def create_numbers(n):
for x in range(n):
yield x**3
for i in create_numbers(5):
print(i)
一次给您一个值,仅在循环调用yield
时计算下一个值。这样,您的循环看起来更好,并且不会遍历该列表2 * n次
答案 3 :(得分:0)
我强烈建议您保留现在的代码:
cubes = [i**3 for i in range(5)]
for value in cubes:
print(value)
很明显,它是正确的。几乎没有理由消除一行代码,而有改变它的风险。
也就是说,Python 3.8将引入赋值表达式,可以(如果我正确地阅读了PEP-572;那里没有相似的例子)可以使用它们消除该行代码:
for value in cubes := [i**3 for i in range(5)]:
print(value)
时间会告诉我们这是否被认为是好的样式,或者至少可以接受。