从列表中删除项目-在迭代过程中-这个成语有什么问题?作为一个实验,我做了这个: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 回答
倚天杖
TA贡献1828条经验 获得超3个赞
原因是什么?
在循环中修改正在迭代的序列是不安全的(这只能发生在可变序列类型(例如列表)上)。 如果您需要修改正在迭代的列表(例如,要复制选定的项),则必须对副本进行迭代。.
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)]
精慕HU
TA贡献1845条经验 获得超8个赞
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 = []
- 3 回答
- 0 关注
- 375 浏览
添加回答
举报
0/150
提交
取消