Python列表索引赋值:A[B==0]与A[0]的差异疑问
问题解答
1. 两段代码的差异
Python普通列表不支持用布尔值或布尔列表作为索引,两者的核心区别如下:
A[0] = 11:合法的列表索引操作,直接将A的第0位元素修改为11,执行后A变为[11, 1, 2, 3]。A[B==0] = 11:B==0的结果是False(B中无元素等于0),用布尔值索引普通列表会触发TypeError,代码无法正常执行。
2. 当B初始化为全0时的区别
若B是全0列表(如B = [0,0,0,0]):
- 普通列表场景:
B==0得到[True, True, True, True],用这个布尔列表索引A依然会报错,因为普通列表仅接受整数或切片作为索引。 - 若使用NumPy数组(旧代码大概率是这种场景):
A[B==0] = 11会批量修改A中所有对应B为0的位置(即全部元素),最终A变为全11的数组。A[0] = 11仅修改A的第0位元素,其余元素保持不变。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

