[英]How do I change column of a 2d list in Python?
我正在創建一個需要將某個列的所有值更改為 1 的程序。最初我認為n[:][0] = 1
就足夠了,但它不起作用。
n = [[0] * 3 for _ in range(3)]
print(n) #output: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[...] #change all of column 0 of 2d list "n" to 1
print(n) #output: [[1, 0, 0], [1, 0, 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]
這會創建一個新結構,而不是修改適當的元素。
大錘方法 - 如果你想要數組尋址,請導入 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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.