漫天疯语 发表于 2021-1-30 01:45:16

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:49:48

本帖最后由 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:00:16

本帖最后由 hrp 于 2021-1-30 02:02 编辑

重点是range(0),循环0次,列表b当然是空的。
就算你改为不是range(0),也会报错,因为你定义a=,a已经超出索引范围了。

漫天疯语 发表于 2021-1-30 02:22:47

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)]为空?

wp231957 发表于 2021-1-30 09:22:14

漫天疯语 发表于 2021-1-30 02:22
是的,b= for i in range(0)]结果为空我理解
但是为什么b=+a for i in range(0)]为空?

有区别吗,不都是循环0次

love_V 发表于 2021-1-30 09:32:21

b =

hrp 发表于 2021-1-30 10:25:32

漫天疯语 发表于 2021-1-30 02:22
是的,b= for i in range(0)]结果为空我理解
但是为什么b=+a for i in range(0)]为空?

仔细看我的上一个回答好吗{:10_266:}

basketmn 发表于 2021-1-30 12:07:30

hrp 发表于 2021-1-30 02:00
重点是range(0),循环0次,列表b当然是空的。
就算你改为不是range(0),也会报错,因为你定义a=,a ...

大佬,你说的其实我也不是很理解
是不是就是说0循环次数,不执行a+a,所以b=[]

hrp 发表于 2021-1-30 13:24:41

basketmn 发表于 2021-1-30 12:07
大佬,你说的其实我也不是很理解
是不是就是说0循环次数,不执行a+a,所以b=[]

循环0次,没有执行将元素添加到列表中的动作,a+a也不会被执行。

漫天疯语 发表于 2021-1-30 15:42:29

hrp 发表于 2021-1-30 13:24
循环0次,没有执行将元素添加到列表中的动作,a+a也不会被执行。

{:10_245:}
你的意思是说运算优先级的问题吗?
是不是+a for i in range(0)]和[(a+a)for i in range(0)]是一样的
还是说 也为[]?

_2_ 发表于 2021-1-30 16:47:40

hrp 发表于 2021-1-30 15:49
原来你是优先级看错了,是的,优先级就是下面这样:

这时因为循环0次,列表推导式生成元素0次,所以 ...

理解满分

_2_ 发表于 2021-1-30 16:50:28

漫天疯语 发表于 2021-1-30 15:42
你的意思是说运算优先级的问题吗?
是不是+a for i in range(0)]和[(a+a)for ...

只要不是语法错误(NameError 之类的)列表都为空
页: [1]
查看完整版本: a=[1] b=[a[0]+a[1] for i in range(0)] 为什么b结果是空值?