[英]How do I create a "matrix" with a python list?
我有一個問題,我不能使用 numpy 並且我第一次在 python 中偶然發現了一些奇怪的東西。
這是一個最小的例子:
a = [[0] * 3] * 3
print(a)
# will output [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# as expected
a[1][1] = 1
# I expect : [[0, 0, 0], [0, 1, 0], [0, 0, 0]],
# but I get:
print(a)
# will output [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
# ? ?
如何創建列表列表,其中所有元素相互獨立?
如果有人打擾,你能解釋一下,那里會發生什么嗎?
這里發生的是對同一個列表的引用(從[0] * 3
獲得的那個)在新列表中被放置了 3 次,而不是 3 個不同的列表被放置在其中。 一種做你想做的事情的方法是:
a = [[[0] * 3] for _ in range(3)]
a = list()
n = 3
for i in range(n):
a.append([0] * n)
a[1][1] = 1
print(a)
使用以下所有代碼片段,您可以使用 python 創建一個 3 * 3 矩陣:
第一種方法:在每一行的循環內附加列
rows = 3
cols = 3
lst = []
matrix = []
for i in range(rows):
for j in range(cols):
lst.append(0)
matrix.append(lst)
lst.clear()
print(matrix)
# the output will be: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
matrix[1][1] = 1
print(matrix)
# the output will be: [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
第二種方法:外部1個列表理解,內部1個連接操作
rows = 3
cols = 3
matrix = [[0] * cols for _ in range(rows)]
print(matrix)
# the output will be: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
matrix[1][1] = 1
print(matrix)
# the output will be: [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
第三種方法:內部1個列表理解,外部1個連接操作
rows = 3
cols = 3
matrix = [[0 for _ in range(cols)]] * rows
print(matrix)
# the output will be: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
matrix[1][1] = 1
print(matrix)
# the output will be: [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
第四種方法:使用numpy
package
import numpy as np
rows = 3
cols = 3
size = rows*cols
matrix = np.array([0]*size).reshape(rows,cols)
print(matrix)
# the output will be: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
matrix[1][1] = 1
print(matrix)
# the output will be: [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
這是我不使用*
而是用列表推導替換它的方法:
a = [[0 for _ in range(3)] for _ in range(3)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.