如何理解Python if判断中[条件1,条件2][布尔值]的特殊语法?
语法解读
你看到的不是什么特殊的if块新语法,是Python两个基础特性组合出来的简写写法:
- Python中布尔值是int的子类,
True等价于整数1,False等价于整数0 - 列表可以通过整数下标取对应位置的元素
我们直接拆解这段判断的执行逻辑:
首先代码构造了一个长度为2的布尔列表:[str(x) > A[i], str(x) < A[i]]
然后用表达式A[0] == '-'的结果作为下标取值:
- 如果A是负数(首字符为'-'),
A[0] == '-'返回True等价于1,取列表第1位的判断条件str(x) < A[i] - 如果A是正数,
A[0] == '-'返回False等价于0,取列表第0位的判断条件str(x) > A[i]
最终if判断的就是取到的这个布尔条件是否成立。
这段写法对应的是题目的业务逻辑:题目要求将x插入到数字字符串A的任意位置,得到最大的可能值,逻辑刚好分两种场景:
- 正数场景:要找第一个比x小的数位,把x插在前面让结果最大,对应判断条件
str(x) > A[i] - 负数场景:要找第一个比x大的数位,把x插在前面让负数的绝对值最小、整体结果最大,对应判断条件
str(x) < A[i]
这种写法就是把两个分支的条件写到列表里用布尔下标选取,完全等价于更易读的常规写法:
def maxValue(self, A, x): x_str = str(x) # 注:原代码的xrange是Python2的写法,Python3统一用range即可 for i in range(len(A)): if A[0] == '-': cond = x_str < A[i] else: cond = x_str > A[i] if cond: return A[:i] + x_str + A[i:] return A + x_str
官方文档对应说明
- 布尔值和整数的等价关系,可参考Python官方文档「内置类型 > 布尔类型」章节,其中明确说明布尔值是整数的子类,True和False对应数值1和0
- 列表的索引取值规则,可参考Python官方文档「内置类型 > 序列类型 > 通用序列操作」章节的相关说明
内容的提问来源于stack exchange,提问作者Pratap Alok Raj
相关产品推荐
相关产品推荐

