Python: 列表推导赋值不同值
我正在创建一个二维列表,想用列表推导式来初始化它。我的目标是让它像这样:
[[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)]