将多行转换为list comphrension python

时间:2016-04-17 16:27:11

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

我有类似于以下

的python代码
for a in range(0,x):
 print("test")
 print("test2")
 if a%2==0:
  l1.append(a)

可以将其转换为列表推导还是有其他方法来减少它。

3 个答案:

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