簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM