从列表中删除项目-在迭代过程中-这个成语有什么问题?作为一个实验,我做了这个:letters=['a','b','c','d','e','f','g','h','i','j','k','l']for i in letters:
letters.remove(i)print letters最后的打印显示不是所有的项目都被删除了?(每个人都是)。IDLE 2.6.2 >>> ================================ RESTART ================================>>> ['b', 'd', 'f', 'h', 'j', 'l']>>>对此有什么解释?它怎么能被重写以删除每一项?
3 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
原因是什么?
在循环中修改正在迭代的序列是不安全的(这只能发生在可变序列类型(例如列表)上)。 如果您需要修改正在迭代的列表(例如,要复制选定的项),则必须对副本进行迭代。.
i += i++ + ++i
它怎么能被重写以删除每一项?
del letters[:]
(如果需要更改对此对象的所有引用) letters[:] = []
(如果需要更改对此对象的所有引用) letters = []
(如果您只想使用新对象)
[:]
#remove unsafe commandscommands = ["ls", "cd", "rm -rf /"]for cmd in commands[:]: if "rm " in cmd: commands.remove(cmd)
commands = [cmd for cmd in commands if not is_malicious(cmd)]
智慧大石
TA贡献1946条经验 获得超3个赞
letters=['a','b','c','d','e','f','g','h','i','j','k','l']for i in letters[:]: # note the [:] creates a slice letters.remove(i)print letters
letters = []
添加回答
举报
0/150
提交
取消