Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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_Numpy_Jupyter Notebook - Fatal编程技术网

在python中,赋值到同一行中的多个变量

在python中,赋值到同一行中的多个变量,python,numpy,jupyter-notebook,Python,Numpy,Jupyter Notebook,我正在使用用于Python的Jupyter笔记本,也在使用Numpy Lib。 这是我试过的 import numpy as np arr = np.arange(10, 21) print(arr) slice_arr = arr[:5]= 6 print(slice_arr) print(arr) 输出为: [10 11 12 13 14 15 16 17 18 19] 6 [ 6 6 6 6 6 15 16 17 18 19] 但是我认为切片arr应该是[6],因为我从切片ar

我正在使用用于Python的Jupyter笔记本,也在使用Numpy Lib。 这是我试过的

import numpy as np
arr = np.arange(10, 21)
print(arr)
slice_arr = arr[:5]= 6
print(slice_arr)
print(arr)
输出为:

[10 11 12 13 14 15 16 17 18 19]
6
[ 6  6  6  6  6 15 16 17 18 19]
但是我认为切片arr应该是
[6]
,因为我从切片arr中获取第一个5个元素,并将
6
分配给所有5个元素,然后分配给切片arr

该语句将如何执行,以及slice\u arr值是如何
6

6
是否分别分配给arr[:5]和
slice_arr

如果分配是从右向左的,则
slice\u arr
应为
[6]

提前感谢

赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔列表,后者生成元组),并将单个结果对象从左到右分配给每个目标列表

为了得到你想要的,可以这样做:

切片arr=arr[:5]=np.零([5])+6

赋值语句计算表达式列表(请记住,这可以是单个表达式或逗号分隔列表,后者生成元组),并将单个结果对象从左到右分配给每个目标列表

为了得到你想要的,可以这样做:


slice_arr=arr[:5]=np。零([5])+6

像这样的多次赋值不常见,也不鼓励(没有充分的理由):

将一个不可变的对象(如数字)分配给多个变量很好:

In [215]: x = y = 10
分配可变对象(如数组或列表)时应谨慎:

In [216]: x = y = [1,2,3]
In [217]: x[0]=12
In [218]: y
Out[218]: [12, 2, 3]
[216]的简单解释是,相同的列表分配给两个变量

虽然我以前没有见过您的表达式,但对我来说,
slice\u arr
应该是
6
,RHS上的值

arr[:5]=6
作为
arr.\uu setitem(slice(None,5),6)
执行,即对
arr
的方法调用

可以想象,解释器也可以执行
slice\u arr=arr.\uuu getitem\uuuu(slice(None,5))
,但如果执行
slice\u arr=6
,则会更简单(且不那么模棱两可)。也就是说,将同一事物指定给两个对象,而不是链接动作

另一种看待这一点的方式是,
6
的复制是在
arr
内完成的,或者作为变异
arr
过程的一部分。它不会在分配之前复制
numpy
在Python中运行。Python解释器解析代码,将其转换为函数和方法调用


下面是一个列表示例

In [235]: x=[1,2,3]
In [236]: y = x[1:] = [3,4,5]
In [237]: y
Out[237]: [3, 4, 5]
In [238]: x
Out[238]: [1, 3, 4, 5]
文档中说,
目标
分配是从左到右完成的。我认为这说明:

In [43]: alist = alist[2:] = [1,2,3]
In [44]: alist
Out[44]: [1, 2, 1, 2, 3]
alist
首先获取值
[1,2,3]
,然后用相同的列表替换切片(最后一个元素)

从左向右赋值的一个人工数组示例:

In [45]: arr = np.arange(10)
In [46]: idx = arr[:idx] = 6
In [47]: idx
Out[47]: 6
In [48]: arr
Out[48]: array([6, 6, 6, 6, 6, 6, 6, 7, 8, 9])
In [49]: idx = arr[:idx] = 4
In [50]: arr
Out[50]: array([4, 4, 4, 4, 6, 6, 6, 7, 8, 9])
idx
在用于
arr[:idx]
表达式之前被赋值。这仅适用于从左到右(在评估RHS之后)执行分配的情况

作业
文档中,正式语言表达为:

赋值形式::=(目标形式“=”+(带星号的形式|收益形式)


像这样的多次作业并不常见,也不鼓励(没有充分的理由):

将一个不可变的对象(如数字)分配给多个变量很好:

In [215]: x = y = 10
分配可变对象(如数组或列表)时应谨慎:

In [216]: x = y = [1,2,3]
In [217]: x[0]=12
In [218]: y
Out[218]: [12, 2, 3]
[216]的简单解释是,相同的列表分配给两个变量

虽然我以前没有见过您的表达式,但对我来说,
slice\u arr
应该是
6
,RHS上的值

arr[:5]=6
作为
arr.\uu setitem(slice(None,5),6)
执行,即对
arr
的方法调用

可以想象,解释器也可以执行
slice\u arr=arr.\uuu getitem\uuuu(slice(None,5))
,但如果执行
slice\u arr=6
,则会更简单(且不那么模棱两可)。也就是说,将同一事物指定给两个对象,而不是链接动作

另一种看待这一点的方式是,
6
的复制是在
arr
内完成的,或者作为变异
arr
过程的一部分。它不会在分配之前复制
numpy
在Python中运行。Python解释器解析代码,将其转换为函数和方法调用


下面是一个列表示例

In [235]: x=[1,2,3]
In [236]: y = x[1:] = [3,4,5]
In [237]: y
Out[237]: [3, 4, 5]
In [238]: x
Out[238]: [1, 3, 4, 5]
文档中说,
目标
分配是从左到右完成的。我认为这说明:

In [43]: alist = alist[2:] = [1,2,3]
In [44]: alist
Out[44]: [1, 2, 1, 2, 3]
alist
首先获取值
[1,2,3]
,然后用相同的列表替换切片(最后一个元素)

从左向右赋值的一个人工数组示例:

In [45]: arr = np.arange(10)
In [46]: idx = arr[:idx] = 6
In [47]: idx
Out[47]: 6
In [48]: arr
Out[48]: array([6, 6, 6, 6, 6, 6, 6, 7, 8, 9])
In [49]: idx = arr[:idx] = 4
In [50]: arr
Out[50]: array([4, 4, 4, 4, 6, 6, 6, 7, 8, 9])
idx
在用于
arr[:idx]
表达式之前被赋值。这仅适用于从左到右(在评估RHS之后)执行分配的情况

作业
文档中,正式语言表达为:

赋值形式::=(目标形式“=”+(带星号的形式|收益形式)


谢谢你的回答。我不知道从左到右的
是语法的正式部分。这是有道理的,尽管在大多数情况下,它不应该有什么不同。谢谢你的回答。我不知道从左到右的
是语法的正式部分。这是有道理的,不过在大多数情况下,这不会有什么不同。谢谢你的回答。因此,这里最右边的值
6
分别分配给
arr[:5]
slice\u arr