为每个子列表的第一个元素赋值的更简单方法?
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]]
我定义了这样一个嵌套列表:
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]]