a=[1] b=[a[0]+a[1] for i in range(0)] 为什么b结果是空值?
>>> a=>>> b=+a for i in range(0)]
>>> b
[]
a结果是1
for i in range(0)]结果是[]
为什么合起来+a for i in range(0)]结果是[]
我想了半天也没有搞明白为什么b是空值,他是怎么迭代计算出来的?麻烦解答一下,不胜感激!
本帖最后由 hrp 于 2021-1-30 15:54 编辑
漫天疯语 发表于 2021-1-30 15:42
你的意思是说运算优先级的问题吗?
是不是+a for i in range(0)]和[(a+a)for ...
原来你是优先级看错了,是的,优先级就是下面这样:
b=[(a+a) for i in range(0)]
这时因为循环0次,列表推导式生成元素0次,所以a+a根本不会被执行,随便写啥只要不是语法错误,列表都是空。
改成
b=[(a+a) for i in range(1)]
后,因循环1次,生成1个元素,生成元素时会执行a+a一次,当遇到a就报错了,因为你的a只有一个元素a。
本帖最后由 hrp 于 2021-1-30 02:02 编辑
重点是range(0),循环0次,列表b当然是空的。
就算你改为不是range(0),也会报错,因为你定义a=,a已经超出索引范围了。 hrp 发表于 2021-1-30 02:00
重点是range(0),循环0次,列表b当然是空的。
就算你改为不是range(0),也会报错,因为你定义a=,a ...
是的,b= for i in range(0)]结果为空我理解
但是为什么b=+a for i in range(0)]为空? 漫天疯语 发表于 2021-1-30 02:22
是的,b= for i in range(0)]结果为空我理解
但是为什么b=+a for i in range(0)]为空?
有区别吗,不都是循环0次 b = 漫天疯语 发表于 2021-1-30 02:22
是的,b= for i in range(0)]结果为空我理解
但是为什么b=+a for i in range(0)]为空?
仔细看我的上一个回答好吗{:10_266:} hrp 发表于 2021-1-30 02:00
重点是range(0),循环0次,列表b当然是空的。
就算你改为不是range(0),也会报错,因为你定义a=,a ...
大佬,你说的其实我也不是很理解
是不是就是说0循环次数,不执行a+a,所以b=[] basketmn 发表于 2021-1-30 12:07
大佬,你说的其实我也不是很理解
是不是就是说0循环次数,不执行a+a,所以b=[]
循环0次,没有执行将元素添加到列表中的动作,a+a也不会被执行。 hrp 发表于 2021-1-30 13:24
循环0次,没有执行将元素添加到列表中的动作,a+a也不会被执行。
{:10_245:}
你的意思是说运算优先级的问题吗?
是不是+a for i in range(0)]和[(a+a)for i in range(0)]是一样的
还是说 也为[]? hrp 发表于 2021-1-30 15:49
原来你是优先级看错了,是的,优先级就是下面这样:
这时因为循环0次,列表推导式生成元素0次,所以 ...
理解满分 漫天疯语 发表于 2021-1-30 15:42
你的意思是说运算优先级的问题吗?
是不是+a for i in range(0)]和[(a+a)for ...
只要不是语法错误(NameError 之类的)列表都为空
页:
[1]