我定义了一个这样的嵌套列表:
T=[[0 for i in range(4)] for i in range(4)]
现在要将值分配给每个子列表的第一个元素,例如10
。
我试过这个:T[:][0] = 10
,但它没有用。我知道这可以使用循环来完成,但有更简单的方法吗?
答案 0 :(得分:2)
您可以在理解中使用三元x if y else z
运算符:
T = [[0 if i else 10 for i in range(4)] for _ in range(4)]
由于int
是不可变的,你也可以这样做:
T = [[10] + [0] * 3 for _ in range(4)]
答案 1 :(得分:2)
您可以使用内置map
功能在每个子列表的开头指定10
。
>>> l = [[0 for i in range(4)] for i in range(4)]
>>> list(map(lambda x, y: x+y[1:], [[10]]*len(l), l))
>>> [[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
答案 2 :(得分:1)
要存储10
,您可以使用列表连接:
T=[[10]+[0 for i in range(3)] for i in range(4)]
输出:
[[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
或者,在Python3中,您可以使用更清晰的列表解压缩*
:
T=[[10, *[0 for _ in range(3)]] for i in range(4)]
输出:
[[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
答案 3 :(得分:1)
您可以尝试使用lambda:
list(map(lambda x:x.__setitem__(0,10),T))
print(T)
输出:
[[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]