Python中用列表索引判断数值符号的特殊写法原理是什么?
Python列表布尔索引代码原理说明
代码运行逻辑
这段代码的核心是利用了Python原生的类型特性:
- Python中
bool(布尔)类型是int(整数)类型的子类,True对应的整数值为1,False对应的整数值为0,布尔值可以直接作为整数使用在索引、运算等场景中。 - 代码中
[1, -1]是直接定义的两元素字面量列表,两个元素对应的索引分别为0、1。 - 执行
sign = [1,-1][x < 0]时,会优先计算索引位的表达式x < 0:- 当x为负数时,
x < 0返回True(等价于1),因此会取列表索引为1的元素,即-1 - 当x为非负数时,
x < 0返回False(等价于0),因此会取列表索引为0的元素,即1
- 当x为负数时,
技巧属性说明
- 这个用法没有Python官方定义的正式名称,Python社区一般称这类用法为布尔值索引取值,注意和Numpy、Pandas等数据处理库中的布尔矩阵索引做区分,这里仅用到了原生Python的基础特性。
- 它不属于列表推导:列表推导是带有
for/if关键字、通过迭代生成新列表的特殊语法,该用法本质就是普通的列表索引操作,只是利用了布尔值的整数特性的灵活编码技巧。 - 实际开发中更推荐可读性更高的三元表达式实现同等效果:
sign = -1 if x < 0 else 1,避免过度使用这类技巧导致代码可读性下降。
内容的提问来源于stack exchange,提问作者Shubham Nanche
相关产品推荐
相关产品推荐

