是否可以直接在循环行中添加"列表推导"?当前代码:
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(。
如果range
的n
足够大,则在循环开始之前,使用循环的列表推导将挂起。您可能希望使用 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)
时间会证明这是否被认为是好的,或者至少是可以接受的风格。