我正在制作一个二维列表,我想用列表理解对其进行初始化。我希望它做这样的事情:
[[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]]
我该怎么做呢?
谢谢你的帮助。
我正在制作一个二维列表,我想用列表理解对其进行初始化。我希望它做这样的事情:
[[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]]
我该怎么做呢?
谢谢你的帮助。
看起来好像您正在寻找这样的东西:
[[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)]
格雷格的回答是正确的,尽管产生您想要的结果的更简单和更快的表达式是
[[j] * 3 for j in (1, 1, 2)]
即,记住for
不需要range
仅适用于a;-),存在列表乘法,等等;-)。
试试看
>>> [[(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 失败