Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中数组中的数组_Python_Arrays_Recursion_Iteration - Fatal编程技术网

Python中数组中的数组

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

这不是一个关于错误的问题。更确切地说,是对事物如何运作的澄清

我把一个元素(例如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 = [[]] * 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的列表时