我在看一个stackoverflow问题(if else in a list comprehension),决定试试下面这行
[ a if a else "Exception" for a in range(10) ]
得到以下清单
[ "Exception", 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
作为输出。我原以为结果会很好
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
因为零就是它自己,就像其他数字被计算一样。为了测试这种行为是否只影响第一个指标,我试着
[ a if a else "Exception" for a in range( 1, 10 ) ]
输出
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
如果行为是特定于第一个索引的,我就不会想到这一点。考虑到目前为止的结果,我尝试了以下想法0
在iterable中有一些特别的东西。你知道吗
[ a if a else "Exception" for a in [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ]
以及
import numpy
[ a if a else "Exception" for a in numpy.zeros(10) ]
这两起案件的结果如下
[ "Exception", "Exception", "Exception", "Exception", "Exception", "Exception", "Exception", "Exception", "Exception", "Exception" ]
如果有人能向我解释这种行为,我将不胜感激。似乎0
在iterable中可能会触发意外行为,但我对这个结论没有信心。你知道吗
0
是被视为False
的数值类型之一,与[] Empty List
和许多其他类型相同,因此在列表压缩中的表达式中,0
是导致Exception
字符串结果的False
条件您可以使用IDLE进行检查:
这是因为在python中
0
的计算结果是False
。所有其他数字的计算结果都是True
,因此被放在列表中。你知道吗我们来看看这个。你知道吗
range(10)
计算结果为0,1,2,3,4,5,6,7,8,90->;
False
所有其他数字->;
True
Python将0视为false,将任何其他数字视为true。你知道吗
自己试试:
您得到的输出是:
1 is true
2 is true
列表压缩的意思是:
对于0到9之间的每个数字,如果a为真,则将a添加到列表中;如果a为假,则将“例外”添加到列表中
因为0被视为False,所以0会得到“Exception”,然后1 2 3。。。其他号码都是这样。你知道吗
相关问题 更多 >
编程相关推荐