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

Nop*_*ope 7 python list-comprehension

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

[[x for i in range(3) if j <= 1: x=1 else x=2] for j in range(3)]
Run Code Online (Sandbox Code Playgroud)

所以它应该返回类似的东西:

[[1,1,1],
 [1,1,1],
 [2,2,2]]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

谢谢你的帮助.

Gre*_*ill 14

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

[[1 if j <= 1 else 2 for i in range(3)] for j in range(3)]
Run Code Online (Sandbox Code Playgroud)

Python 条件表达式与您可能习惯使用的有点不同,如果您来自C或Java之类的东西:

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

做同样事情的稍微短一点的方法是:

[[1 if j <= 1 else 2]*3 for j in range(3)]
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 14

格雷格的反应是正确的,尽管产生你想要的结果会更简单,更快速地表达

[[j] * 3 for j in (1, 1, 2)]
Run Code Online (Sandbox Code Playgroud)

即,请记住,for不需要range仅适用于;-),列表乘法存在,依此类推;-).