如何在 Python 中制作二维列表(没有 numpy)?
How to make two-dimensional list in Python (without numpy)?
这可能是重复的问题,但我仍然对此感到好奇。
我想在 Python 中制作二维列表而不使用 numpy。所以我列了一个清单。这是我的代码:
myList = [None] * 3
print('myList :', myList)
myMatrix = [myList] * 3
#myMatrix = [[None, None, None], [None, None, None], [None, None, None]]
print('myMatrix', myMatrix)
for i in range (0,3):
for j in range (0, 3):
myMatrix[i][j] = i+j
print('myMatrix[',i,'] : ', myMatrix[i])
print(myMatrix)
print(myMatrix[0])
print(myMatrix[1])
print(myMatrix[2])
我知道声明:
myMatrix = [myList] * 3
使代码无法按我预期的那样工作,这是因为列表是可变对象,这意味着 myMatrix[0]、myMatrix[1]、myMatrix[2] 将引用同一个对象。对其中任何一个的更改意味着对所有这些的更改,这不是我在代码中所期望的。这是我的代码的意外输出:
('myList :', [None, None, None])
('myMatrix', [[None, None, None], [None, None, None], [None, None, None]])
('myMatrix[', 0, '] : ', [0, 1, 2])
('myMatrix[', 1, '] : ', [1, 2, 3])
('myMatrix[', 2, '] : ', [2, 3, 4])
[[2, 3, 4], [2, 3, 4], [2, 3, 4]]
[2, 3, 4]
[2, 3, 4]
[2, 3, 4]
我找到的唯一解决方案是,我应该写:
而不是声明 myMatrix = [myList] * 3
myMatrix = [[None, None, None], [None, None, None], [None, None, None]]
这将使代码按照我预期的方式工作(程序的输出):
('myMatrix', [[None, None, None], [None, None, None], [None, None, None]])
('myMatrix[', 0, '] : ', [0, 1, 2])
('myMatrix[', 1, '] : ', [1, 2, 3])
('myMatrix[', 2, '] : ', [2, 3, 4])
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
但这不是定义 NxN 矩阵的有效方法,尤其是当 N 是一个大数时。
Python是否有使用列表的列表定义 NxN 矩阵的有效方法?
我比较熟悉C/C++,所以这个问题真的很困扰我。有些答案会推荐我使用 numpy,但此刻我想从头开始学习基础 Python(不导入任何库)。当我使用 C/C++ 时,我可以轻松地使用这个二维数组,而无需导入任何库。当我刚接触 Python 时要求我使用 numpy 就像当我刚接触 C 时要求我使用 STL。
当然我以后会学习numpy,但是我想在没有numpy的情况下先解决这个问题。
最直接的搭建方式是这样的:
list_of_lists = []
for row in range(rows):
inner_list = []
for col in range(cols):
inner_list.append(None)
list_of_lists.append(inner_list)
或列表理解:
list_of_lists = [[None for col in range(cols)] for row in range(rows)]
两种方式是等价的
要创建 myList
初始填充 None
,您可以这样做:
N = 3
myList = [[None] * N for i in range(N)]
print(myList)
给出:
[[None, None, None], [None, None, None], [None, None, None]
然后如果你想更新每个单元格,只需遍历行和列,其中 row
是矩阵中行的索引, col
是矩阵中列的索引矩阵。然后您可以相应地更新每个 my_List[row][col]
单元格:
for row in range(N):
for col in range(N):
myList[row][col] = row + col
print(myList)
哪些输出:
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
这可能是重复的问题,但我仍然对此感到好奇。
我想在 Python 中制作二维列表而不使用 numpy。所以我列了一个清单。这是我的代码:
myList = [None] * 3
print('myList :', myList)
myMatrix = [myList] * 3
#myMatrix = [[None, None, None], [None, None, None], [None, None, None]]
print('myMatrix', myMatrix)
for i in range (0,3):
for j in range (0, 3):
myMatrix[i][j] = i+j
print('myMatrix[',i,'] : ', myMatrix[i])
print(myMatrix)
print(myMatrix[0])
print(myMatrix[1])
print(myMatrix[2])
我知道声明:
myMatrix = [myList] * 3
使代码无法按我预期的那样工作,这是因为列表是可变对象,这意味着 myMatrix[0]、myMatrix[1]、myMatrix[2] 将引用同一个对象。对其中任何一个的更改意味着对所有这些的更改,这不是我在代码中所期望的。这是我的代码的意外输出:
('myList :', [None, None, None])
('myMatrix', [[None, None, None], [None, None, None], [None, None, None]])
('myMatrix[', 0, '] : ', [0, 1, 2])
('myMatrix[', 1, '] : ', [1, 2, 3])
('myMatrix[', 2, '] : ', [2, 3, 4])
[[2, 3, 4], [2, 3, 4], [2, 3, 4]]
[2, 3, 4]
[2, 3, 4]
[2, 3, 4]
我找到的唯一解决方案是,我应该写:
而不是声明 myMatrix = [myList] * 3myMatrix = [[None, None, None], [None, None, None], [None, None, None]]
这将使代码按照我预期的方式工作(程序的输出):
('myMatrix', [[None, None, None], [None, None, None], [None, None, None]])
('myMatrix[', 0, '] : ', [0, 1, 2])
('myMatrix[', 1, '] : ', [1, 2, 3])
('myMatrix[', 2, '] : ', [2, 3, 4])
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
但这不是定义 NxN 矩阵的有效方法,尤其是当 N 是一个大数时。
Python是否有使用列表的列表定义 NxN 矩阵的有效方法?
我比较熟悉C/C++,所以这个问题真的很困扰我。有些答案会推荐我使用 numpy,但此刻我想从头开始学习基础 Python(不导入任何库)。当我使用 C/C++ 时,我可以轻松地使用这个二维数组,而无需导入任何库。当我刚接触 Python 时要求我使用 numpy 就像当我刚接触 C 时要求我使用 STL。
当然我以后会学习numpy,但是我想在没有numpy的情况下先解决这个问题。
最直接的搭建方式是这样的:
list_of_lists = []
for row in range(rows):
inner_list = []
for col in range(cols):
inner_list.append(None)
list_of_lists.append(inner_list)
或列表理解:
list_of_lists = [[None for col in range(cols)] for row in range(rows)]
两种方式是等价的
要创建 myList
初始填充 None
,您可以这样做:
N = 3
myList = [[None] * N for i in range(N)]
print(myList)
给出:
[[None, None, None], [None, None, None], [None, None, None]
然后如果你想更新每个单元格,只需遍历行和列,其中 row
是矩阵中行的索引, col
是矩阵中列的索引矩阵。然后您可以相应地更新每个 my_List[row][col]
单元格:
for row in range(N):
for col in range(N):
myList[row][col] = row + col
print(myList)
哪些输出:
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]