Python中对None的if else判断
有没有办法在Python中把这个写成一行,或者更好的是,作为一个表达式而不是语句呢?
parts = ['0', '1', 'None', '5', '4']
[int(p) for p in parts]
当然,这样会报错,
ValueError: invalid literal for int() with base 10: 'None'
所以:
[p=='None' and None or int(p) for p in parts]
这样也不行,因为你不能可靠地用None
和and/or的组合。即使p=='None'
是真的,None
也相当于假,所以会跳到or
的部分。
[int(p) if p=='None' else None for p in parts]
这个也不行。我猜int(p)
是在条件之前就被计算了?(这听起来有点奇怪。)
a = []
for p in parts:
if p=='None': k = None; else: k = int(p)
a.append(k)
不行,语法无效。
a = []
for p in parts:
if p=='None':
k = None;
else:
k = int(p)
a.append(k)
啊!终于找到了。但是难道没有更简短的方法来写这么简单的循环吗?
5 个回答
4
[ [int, eval] [p=='None'] (p) for p in parts]
应该保存,因为eval只是在字符串'None'上被调用。
7
差不多就要成功了:
[int(p) if p != 'None' else None for p in parts]
14
你几乎做对了:
[None if p == 'None' else int(p) for p in parts]