为每个子列表的第一个元素赋值的更简单方法?

Easier way to assign a value to the first element of each sub list?

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

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

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

可以在理解中使用三元运算符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)]

要存储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]]

您可以使用内置 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]]

你可以试试 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]]