python - 在 for 循环期间用布尔值就地修改列表的奇怪行为
问题描述
通过解决 python 练习,我遇到了我不理解的 for-loop 的奇怪行为。
move_zeros(array)
应该将数组的所有零移动到其末尾。
def move_zeros(array):
for x in array:
if x == 0 and x is not False:
array.remove(x)
array.append(x)
return array
它适用于具有各种项目的数组,但如果数组包含 False,则结果是错误的:
move_zeros([1,2,0,1,0,1,0,3,0,1]) => [ 1, 2, 1, 1, 3, 1, 0, 0, 0, 0 ]
(正确的!)
但
move_zeros([0, 1, False, False]) => [1, False, 0, 0]
(不正确!)
解决方案
def move_zeros(array):
new_arr = []
nulls = []
for x in array:
if x:
new_arr.append(x)
else:
nulls.append(x)
return new_arr + nulls
请不要通过您迭代的内容更改对象...
推荐阅读
- java - 短暂不活动后,Openshift 服务不可用
- python - python中的zipfile模块来压缩文件
- javascript - 如何从javascript中的数据中删除标签?
- java - 如何将 .cpp C++ 本机库导入 Android Studio
- android - 如何在 Android 中自定义 ContextMenu?
- c# - 根据对象属性查找和添加对象
- javascript - JQuery Ajax to Fetch Conversion clarificartions
- vue.js - 当 CSS 有作用域时,在两个不同的组件中使用相同的类名是一种不好的做法吗?
- mysql - 为什么 TIMESTAMP 返回 NULL
- javascript - 如何在 LoopBack 3 中使用 where 过滤相关模型(hasMany 关系)