Python For循环不';t将信息正确附加到2D数组中

Python For循环不';t将信息正确附加到2D数组中,python,arrays,for-loop,multidimensional-array,Python,Arrays,For Loop,Multidimensional Array,我已经创建了一个空的二维数组。当我试图在它里面添加东西时,它并没有正确地这样做。每个索引都包含适当的信息,但由于某种原因,会将上一个索引中的信息带入下一个索引。这是我的密码: rows, cols = (3, 2) array = [[]*cols]*rows # Creating the empty 2D array. fruit_list = ['apples', 'bananas', 'oranges'] # My fruit list f

我已经创建了一个空的二维数组。当我试图在它里面添加东西时,它并没有正确地这样做。每个索引都包含适当的信息,但由于某种原因,会将上一个索引中的信息带入下一个索引。这是我的密码:

rows, cols = (3, 2)
array = [[]*cols]*rows                         # Creating the empty 2D array.
fruit_list = ['apples', 'bananas', 'oranges']  # My fruit list
for i in range(0, 3):
  array[i].append(fruit_list[i])       # Appending to the 2D array a fruit, 
  array[i].append(0)                   # followed by the number 0
  print(array[i])                      # Printing each index
我在控制台中得到的结果是:

['apples', 0]                             # This is good (index 1)
['apples', 0, 'bananas', 0]               # This is not good (index 2)
['apples', 0, 'bananas', 0, 'oranges', 0] # This is not good (index 3)
# etc.

我该如何阻止这种情况发生?我希望每个索引都有自己的结果和数字0。

问题在于:

array = [[]*cols]*rows
首先,
[]*cols
只是创建了一个空列表(空,因为
*
操作符没有什么可重复的)。但更重要的是,
*行
只复制对该列表的引用,而不创建新的空列表。因此,无论您对单个列表执行什么操作,都将在外部列表的所有插槽中可见

因此,改变:

array = [[]*cols]*rows 
要了解列表,请执行以下操作:

array = [[] for _ in range(rows)]
改进 不是您的问题,但您可以省略循环,并使用上述列表理解立即用数据填充列表:

array = [[fruit, 0] for fruit in ['apples', 'bananas', 'oranges']]

这看起来不错!你还想要什么?请显示您的预期输出,以便我们知道您想要做什么。这是否回答了您的问题?另一种方法是使用
array.append([fruit\u list[i],0])
然后您可以使用
array=[]