我正在创建一个程序,需要将某个列的所有值都更改为1.最初我认为NaN
已足够,但它不起作用。
n[:][0] = 1
答案 0 :(得分:0)
这是一个舷外单线:
result = list(map(lambda x: list(map(lambda y: y[1] + 1 if y[0] == 0 else y[1], enumerate(x))), n))
print(result)
# [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
或者更容易阅读的内容,如评论中所示:
[[1 if c == 0 else j for c,j in enumerate(k)] for k in n]
与更新元素的简单循环相比:
for x in n:
x[0] = 1
print(n)
# [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
注意:使用lambda(map(...))
的第一种方式只是个玩笑,绝不使用它。它的主要目的是展示尝试获得一个衬垫之间的对比,并且只使用一个简单的循环来完成工作。
修改强>
@Stefan Pochmann在评论中推荐了这种单线解决方案:[[1] + k[1:] for k in n]
这会创建一个新结构,而不是修改元素。
答案 1 :(得分:0)
大锤方法 - 如果你想要数组寻址,导入numpy
import numpy as np
n = [[0] * 3 for _ in range(3)]
nary = np.array(n) # or: np.zeros((3,3))
nary[:, 0] = 1
nary.tolist()
Out[120]: [[1, 0, 0], [1, 0, 0], [1, 0, 0]]