更容易为每个子列表的第一个元素赋值?

时间:2018-01-26 14:20:50

标签: python list nested assign

我定义了一个这样的嵌套列表:

 T=[[0 for i in range(4)] for i in range(4)]

现在要将值分配给每个子列表的第一个元素,例如10。 我试过这个:T[:][0] = 10,但它没有用。我知道这可以使用循环来完成,但有更简单的方法吗?

4 个答案:

答案 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]]