我有一个列表列表,我想在迭代时更新每个列表。 我按如下方式初始化了我的列表:
my_list = [[0]*n]*n当我想更新内部列表时,通过以下方式:
for i in range(something): for j in range(anotherthing): my_list[i][j] = something所发生的是整个列表仅在每次迭代时更新而不是第i个列表,例如[[1,2],[1,2]]。 我想要的是在我初始化它的第一次迭代时[[1,2],[0,0]],并且成为[[1,2],[values]]。 我究竟做错了什么?
I've a list of lists and I want to update each list at iteration. I initialized my list as follows:
my_list = [[0]*n]*nWhen I want to update the inner lists, by something like:
for i in range(something): for j in range(anotherthing): my_list[i][j] = somethingWhat happens is that the whole list is updated rather than the ith list only at each iteration, e.g. [[1,2], [1,2]]. What I want is at the first iteration to be [[1,2], [0,0]] as I initialized it, and in to be [[1,2], [values]]. What am I doing wrong?
最满意答案
列表乘法运算符*不会创建副本,但会创建对同一数据的多个引用。 而不是使用*考虑使用理解来初始化您的列表:
my_list = [[0 for i in range(n)] for j in range(n)]The list multiplication operator * does not create copies, but creates multiple references to the same data. Instead of using * consider using comprehensions for initializing your list:
my_list = [[0 for i in range(n)] for j in range(n)]更多推荐
发布评论