我有类似于以下
的python代码for a in range(0,x):
print("test")
print("test2")
if a%2==0:
l1.append(a)
可以将其转换为列表推导还是有其他方法来减少它。
答案 0 :(得分:1)
"是否可以将其转换为列表推导" ?
当然可以:
x = 10
l1 = [a for a in range(x) if a % 2 == 0]
答案 1 :(得分:1)
列表的生成可以转换为列表解析,但是打印语句不能在一行中完成:
x = 10
l1 = [a for a in range(0, x) if a % 2 == 0]
如果您还需要print
语句,会为您提供列表,还需要做更多工作,例如:定义在构建列表时调用的函数:
def foo(a):
print('Test1')
print('Test2')
return a
l2 = [a for a in range(0, x) if foo(a) % 2 == 0]
然而,后一个选项是"代码气味",在依赖函数的副作用输出时生成列表不是一个好习惯(在一个中等大小的程序中非常容易出错) 。我不推荐后者。
答案 2 :(得分:0)
不推荐但你实际上可以输出文本并存储元素,因为print是python3中的一个函数:
l = [print("test\ntest2") or a for a in range(5) if not a % 2]
在python2中,你需要from __future__ import print_function