如何在Python中更改二维列表的列?

时间:2017-12-27 02:55:48

标签: python python-3.x

我正在创建一个程序,需要将某个列的所有值都更改为1.最初我认为NaN已足够,但它不起作用。

n[:][0] = 1

2 个答案:

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