"List comprehensions"直接进入环形线路



是否可以直接在循环行中添加"列表推导"?当前代码:

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)

cubes = [ ]
    for value in cubes = [i**3 for i in range(5)]:
        print(value)

您可以简单地将表达式按原样放入循环中:

for value in [i**3 for i in range(5)]:
    print(value)

输出:

0
1
8
27
64

如果您希望在代码中稍后同时cubes列表并想要打印,则可以通过利用 print 返回None的事实来执行列表理解中的所有操作:

cubes = [print(i**3) or i**3  for i in range(5)]

这是推荐的吗?不!这显然违反了"Python的禅"(PEP20(。

如果rangen足够大,则在循环开始之前,使用循环的列表推导将挂起。您可能希望使用 yield 来抽象出循环过滤:

def create_numbers(n):
    for x in range(n):
        yield x**3
for i in create_numbers(5):
    print(i)

yield一次为您提供一个值,仅在循环调用next()时计算下一个值。这样你的循环看起来更好,并且不会迭代该列表 2*n 次

我强烈建议您保留现在拥有的代码:

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)

时间会证明这是否被认为是好的,或者至少是可以接受的风格。

最新更新