在 python 中创建包含 n 行的二维列表时出现问题
Problem in creating a 2D list with n rows in python
我想在 python 中创建一个空的 2D 列表,因此在任何行中我都可以根据需要添加多个元组
前任。 [ [ (2,3)] , [ (4,5) ,(6,5) ,(9,0)] ]
我只知道列表的行将是 n。之后我可以根据问题手动附加元组。
所以我尝试使用以下方法创建二维列表:
L = [ []*n ] # n is number of rows ex. n = 5
print(L) # It gives [[]] instead of [[], [], [], [], []]
为什么?
使用此代码创建二维数组:
L = [[] for _ in range(n)]
[] * n
复制列表内 中存在的元素。由于您的列表为空,因此 [] * n
的计算结果为 []
.
此外,对于 n = 5,[[]] * n
将产生 [[],[],[],[],[]
,但尝试将元素附加到任何内部列表将导致所有列表包含相同的元素。
>>> L = [[]]* 5
>>> L[0].append(1)
>>> L
[[1], [1], [1], [1], [1]]
这是因为外部列表的每个元素本质上都是对同一个内部列表的引用。
因此,创建此类列表列表的惯用方法是
L = [[] for _ in range(n)]
我想在 python 中创建一个空的 2D 列表,因此在任何行中我都可以根据需要添加多个元组 前任。 [ [ (2,3)] , [ (4,5) ,(6,5) ,(9,0)] ] 我只知道列表的行将是 n。之后我可以根据问题手动附加元组。 所以我尝试使用以下方法创建二维列表:
L = [ []*n ] # n is number of rows ex. n = 5
print(L) # It gives [[]] instead of [[], [], [], [], []]
为什么?
使用此代码创建二维数组:
L = [[] for _ in range(n)]
[] * n
复制列表内 中存在的元素。由于您的列表为空,因此 [] * n
的计算结果为 []
.
此外,对于 n = 5,[[]] * n
将产生 [[],[],[],[],[]
,但尝试将元素附加到任何内部列表将导致所有列表包含相同的元素。
>>> L = [[]]* 5
>>> L[0].append(1)
>>> L
[[1], [1], [1], [1], [1]]
这是因为外部列表的每个元素本质上都是对同一个内部列表的引用。
因此,创建此类列表列表的惯用方法是
L = [[] for _ in range(n)]