在python中,赋值到同一行中的多个变量
我正在使用用于Python的Jupyter笔记本,也在使用Numpy Lib。 这是我试过的在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
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