布尔值的比较是不相同的,在 for 循环的使用中也遇到过坑。foo 可能为空,用 for i in [] 是可以的,for i in [None] 把程序搞崩了。
>>> [] == [None]
False
1
swcsend 2019-08-30 18:04:42 +08:00
[None] 表示列表里面有一个 None
[] 表示列表里面没有元素 |
2
ClutchBear 2019-08-30 18:15:22 +08:00
for i in [None]
如果有这种情况, 应该增加一个判断 if i is None: continue |
3
GeruzoniAnsasu 2019-08-30 18:20:34 +08:00
let l1 = []
let l2 = [None] len(l1) == 0 len(l2) == 1 l1[0] ==> IndexError: list index out of range l2[0].__class__ ==> <class 'NoneType'> none2 = l2[0].__class__() none2 is None ==> True |
4
mixure 2019-08-30 18:37:10 +08:00
代码上下文呢?
|
5
Hstar 2019-08-30 18:48:58 +08:00
关键错误在于 for 循环内部不要 if i 这样判断,多一次 if i is None 筛选。
|
6
CEBBCAT 2019-08-30 19:59:45 +08:00
|
7
jmc891205 2019-08-30 20:07:40 +08:00
空列表和包含一个 None 的列表肯定有区别啊
否则,[], [None],[None, None], [None for i in range(10000)]都没有区别吗 |
8
wangxiaoshan 2019-09-11 12:09:58 +08:00
空列表可以简单通过两个中括号[]表示,表示里面什么东西都没有。
None 是 python 的内建值,含义是“这里什么也没有‘。比如如果要初始化一个长度 X 的序列,就需要让每个编码位置上都是空值,此时需要一个值代表空置,即里面没有任何元素,可以使用 None。 >>> a=[None]*5 >>>a [None,None,None,None,None] |