Python: 列表推导赋值不同值

7 投票
3 回答
7475 浏览
提问于 2025-04-15 14:50

我正在创建一个二维列表,想用列表推导式来初始化它。我的目标是让它像这样:

[[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 个回答

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 这个条件不成立了

14

Greg的回答是对的,不过有一个更简单、更快的方法可以得到你想要的结果。

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

也就是说,记住for不一定只能用在range上;-),列表乘法也是可以的,还有其他方法;-)。

14

看起来你在寻找类似这样的东西:

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

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

撰写回答