python - 如何忽略False,所以不算为0
问题描述
有没有办法让 0 与 False 不一样?因为我一直得到错误的结果,我还找不到解决方案。
def move_zeros(array):
a = 0
for i in array:
if array[a] == 0:
array.remove(array[a])
array.append(0)
a +=1
else:
a += 1
return array
print(move_zeros([0,1,None,2,False,1,0]))
输入数组:
[0,1,None,2,False,1,0]
预期输出:
[1,None,2,False,1,0,0]
实际输出:
[1, None, 2, 1, 0, 0, 0]
解决方案
Boolean 类型继承自 int 类型,因此 False 为 0,但类型不同。这意味着您可以通过类型检查区分 0 和 False。False 和 bool,因此是 int,但 0 不是 bool。
此外,.remove
删除等于该值的第一个值,因此即使进行此检查,代码也不起作用。;) 无论 的值如何,它都取了第一个 0,a
所以它也抓取了 False。让我们使用del
def move_zeros(array):
a = 0
for i in array:
if array[a] == 0 and not isinstance(array[a], bool):
del array[a]
array.append(0)
# a +=1 if you remove an element, next one jumps in its place, so you have to check the same index
else:
a += 1
return array
print(move_zeros([0,1,None,2,False,1,0]))
输出:
[1, None, 2, False, 1, 0, 0]
推荐阅读
- python - 将python转换为exe文件的问题
- django - 如何从模型字段中获取数据并使用模板中的数据进行计算?
- c# - 查找MCG0007编译器警告的出处
- bash - 检查 $PATH 的内容,如有必要,在 .bashrc 中添加 ~/.local/bin
- session-cookies - 我的会话超时配置在 yii 2 中无法正常工作
- javascript - .env 中的 firebase 配置选项在本地服务器中工作,但在部署到 netlify 时显示错误
- python - 在 seaborn.jointplot 中显示 p 值
- c++ - 如何使用转换在 Eigen 中通过 Matrix3d 旋转矩阵旋转点 MatrixXd
- ios - UICollectionView 选择和删除可区分数据源的问题
- amazon-web-services - AWS ECS Fargate 中的 docker cap-add