Python中数组中的数组
这不是一个关于错误的问题。更确切地说,是对事物如何运作的澄清 我把一个元素(例如0)放在一个数组中,这个数组也在一个数组中。迭代执行时,代码如下所示:Python中数组中的数组,python,arrays,recursion,iteration,Python,Arrays,Recursion,Iteration,这不是一个关于错误的问题。更确切地说,是对事物如何运作的澄清 我把一个元素(例如0)放在一个数组中,这个数组也在一个数组中。迭代执行时,代码如下所示: arr = [[0 for x in range(2)] for x in range(2)] 递归地 def zero(array,n,i): if i >= n: return array else: array[i].append(0) return zero(array,n,i+1) arr = [[]]
arr = [[0 for x in range(2)] for x in range(2)]
递归地
def zero(array,n,i):
if i >= n:
return array
else:
array[i].append(0)
return zero(array,n,i+1)
arr = [[]] * 2
print zero(arr,2,0)
它们都有如下输出:
[[0,0],[0,0]]
我没有得到递归所经历的过程(我只是通过反复试验意外地编写了代码)
我没有得到的是,因为我在较大数组中的第一个数组(索引为零)中追加了零,所以不应该只在第一个数组中追加“0”,而不在第二个数组中追加吗?但事实并非如此,两个数组都追加了“0”。当它返回函数时,不再将“0”追加到第二个数组,而是将其再次追加到两个数组
我试图追踪它,但我真的不明白它是怎么发生的。感谢您的回复。这可能是因为
arr = [[]] * 2
正在创建对同一列表构造的另一个引用。因此,您有一个包含两个元素的数组,这两个元素都是对同一列表的引用。因此,其中一个上的应用程序(例如附加一个元素)将导致相同的操作交互到另一个上 这是因为
arr = [[]] * 2
正在创建对同一列表构造的另一个引用。因此,您有一个包含两个元素的数组,这两个元素都是对同一列表的引用。因此,其中一个上的应用程序(例如附加一个元素)将导致相同的操作交互到另一个上 这是因为
arr = [[]] * 2
正在创建对同一列表构造的另一个引用。因此,您有一个包含两个元素的数组,这两个元素都是对同一列表的引用。因此,其中一个上的应用程序(例如附加一个元素)将导致相同的操作交互到另一个上 这是因为
arr = [[]] * 2
正在创建对同一列表构造的另一个引用。因此,您有一个包含两个元素的数组,这两个元素都是对同一列表的引用。因此,其中一个上的应用程序(例如附加一个元素)将导致相同的操作交互到另一个上 使用交互式解释器分解列表理解的组成部分:
>>> arr = [[0 for x in range(2)] for x in range(2)]
>>> print arr
[[0, 0], [0, 0]]
>>> inner_array = [0 for x in range(2)]
>>> print inner_array
[0, 0]
>>> total_arr = [inner_array for x in range(2)]
>>> print total_arr
[[0, 0], [0, 0]]
因此,您有一个[0,0]
数组,然后将该数组放入外部列表中,由于范围(2)
组件,该列表将创建相同的数组两次
可以验证它们是否是完全相同的数组,如下所示:
>>> id(inner_array)
139834121190864
>>> id(total_arr[0])
139834121190864
>>> id(total_arr[1])
139834121190864
id
返回对象的地址,在这里,它们都是相同的。使用交互式解释器分解列表理解的组成部分:
>>> arr = [[0 for x in range(2)] for x in range(2)]
>>> print arr
[[0, 0], [0, 0]]
>>> inner_array = [0 for x in range(2)]
>>> print inner_array
[0, 0]
>>> total_arr = [inner_array for x in range(2)]
>>> print total_arr
[[0, 0], [0, 0]]
因此,您有一个[0,0]
数组,然后将该数组放入外部列表中,由于范围(2)
组件,该列表将创建相同的数组两次
可以验证它们是否是完全相同的数组,如下所示:
>>> id(inner_array)
139834121190864
>>> id(total_arr[0])
139834121190864
>>> id(total_arr[1])
139834121190864
id
返回对象的地址,在这里,它们都是相同的。使用交互式解释器分解列表理解的组成部分:
>>> arr = [[0 for x in range(2)] for x in range(2)]
>>> print arr
[[0, 0], [0, 0]]
>>> inner_array = [0 for x in range(2)]
>>> print inner_array
[0, 0]
>>> total_arr = [inner_array for x in range(2)]
>>> print total_arr
[[0, 0], [0, 0]]
因此,您有一个[0,0]
数组,然后将该数组放入外部列表中,由于范围(2)
组件,该列表将创建相同的数组两次
可以验证它们是否是完全相同的数组,如下所示:
>>> id(inner_array)
139834121190864
>>> id(total_arr[0])
139834121190864
>>> id(total_arr[1])
139834121190864
id
返回对象的地址,在这里,它们都是相同的。使用交互式解释器分解列表理解的组成部分:
>>> arr = [[0 for x in range(2)] for x in range(2)]
>>> print arr
[[0, 0], [0, 0]]
>>> inner_array = [0 for x in range(2)]
>>> print inner_array
[0, 0]
>>> total_arr = [inner_array for x in range(2)]
>>> print total_arr
[[0, 0], [0, 0]]
因此,您有一个[0,0]
数组,然后将该数组放入外部列表中,由于范围(2)
组件,该列表将创建相同的数组两次
可以验证它们是否是完全相同的数组,如下所示:
>>> id(inner_array)
139834121190864
>>> id(total_arr[0])
139834121190864
>>> id(total_arr[1])
139834121190864
id
返回对象的地址,在这里,它们都是相同的。在创建多个重复的列表时使用arr=[[]用于范围内(2)]
在创建多个重复的列表时使用arr=[]用于范围内(2)]
在创建范围内(2)的列表时使用arr=[]用于范围内(2)]
当创建一个包含多个DUP的列表时请使用范围(2)中的arr=[]来创建一个包含多个DUP的列表时。当创建一个包含多个DUP的列表时