python - 如何不将 False/其他值评估为 0
问题描述
def move_zeros(array):
no_zero = [i for i in list(array) if i != int(0)]
print(array)
print(no_zero)
for i in range(array.count(0)):
no_zero.append(0)
return no_zero
这是我用于 codeacademy kata 的代码,其目的是将列表数组中的所有零移动到数组的前面。我的代码在大多数情况下都可以工作,但是在某些情况下代码会卡住,例如它将 False 视为零以及诸如 0.0 之类的值,我如何更改它以使其影响文字数字 0
编辑:被问到例如预期算法的输出
move_zeros([false,1,0,1,2,0,1,3,"a"])
returns[false,1,1,2,1,3,"a",0,0]
而我的代码返回
[1, 1, 2, 1, 3, 'a', 0, 0, 0]
解决方案
False
真的是0
,因为bool
是一个子类int
。
该值False
是一个单例,因此您始终可以检查if i is False
以将其与 0 区分开来。
整数0
也是一个单例,但这是一个实现细节,而不是语言的保证。我宁愿不依赖它。
要排除该float
值0.0
,您始终可以测试确切的类型:if type(i) is int
. 的子类int
将无法通过此测试。
推荐阅读
- c - 我需要将 C(或更好)转换为 https://venus.cs61c.org/ 将接受的 RISC-V
- python - 如何根据标头python排列数据框中的数据?
- javascript - 使用正则表达式反应路由器
- mysql - 数值除法格式输出题
- python - 为每一行添加价值
- web-audio-api - 通过 Tone.js 连续改变和弦频率
- 2d - 查找透视正方形内每个正方形的中心(2D)
- elasticsearch - 查找重复项时指定 Elasticsearch 聚合字段
- javascript - 我的查询助手方法中是否缺少基本案例?
- azure - Azure 逻辑应用 CTLR+V 功能不再起作用