Python:列表理解以分配不同的值

时间:2009-10-05 23:45:03

标签: python list-comprehension

我正在制作一个2D列表,我想用列表理解来初始化它。我希望它能做到这样的事情:

[[x for i in range(3) if j <= 1: x=1 else x=2] for j in range(3)]

所以应该返回类似的内容:

[[1,1,1],
 [1,1,1],
 [2,2,2]]

我该怎么做呢?

感谢您的帮助。

3 个答案:

答案 0 :(得分:14)

好像你正在寻找这样的东西:

[[1 if j <= 1 else 2 for i in range(3)] for j in range(3)]

如果您来自C或Java之类的东西,Python conditional expression与您可能习惯的有点不同:

  

表达式x if C else y首先评估 C not x );如果 C 为真,则计算 x 并返回其值;否则,将评估 y 并返回其值。

执行相同操作的稍微简短的方法是:

[[1 if j <= 1 else 2]*3 for j in range(3)]

答案 1 :(得分:14)

Greg的回答是正确的,尽管产生所需结果的更简单,更快速的表达方式将是

[[j] * 3 for j in (1, 1, 2)]

即,请记住,for不需要仅适用于range ;-),列表乘法存在,等等; - )。

答案 2 :(得分:1)

试试

>>> [[(1 if j<1 else 2) for i in range(3)] for j in range(3)]
[[1, 1, 1], [2, 2, 2], [2, 2, 2]]

第二次j = 1,因此j <1失败

相关问题