簡體   English   中英

如何使用 python 列表創建“矩陣”?

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

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