直接在for循环行中“列出理解”

时间:2019-02-04 17:55:18

标签: python python-3.x list-comprehension

是否可以在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)

4 个答案:

答案 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)

时间会告诉我们这是否被认为是好的样式,或者至少可以接受。