7

我正在制作一个二维列表,我想用列表理解对其进行初始化。我希望它做这样的事情:

[[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]]

我该怎么做呢?

谢谢你的帮助。

4

3 回答 3

14

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

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

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

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

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

[[1 if j <= 1 else 2]*3 for j in range(3)]
于 2009-10-05T23:49:46.580 回答
14

格雷格的回答是正确的,尽管产生您想要的结果的更简单和更快的表达式是

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

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

于 2009-10-05T23:55:08.533 回答
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 失败

于 2009-10-05T23:55:33.837 回答