我正在制作一个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]]
我该怎么做呢?
感谢您的帮助。
答案 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失败