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=[]