Fez*_*ter 0 python for-loop list modulo
我有一个四个数字的列表:
mylist=[3,5,67,4]
Run Code Online (Sandbox Code Playgroud)
我想删除所有奇数.所以,我写了以下内容:
for item in mylist:
if item%2==1:
mylist.remove(item)
Run Code Online (Sandbox Code Playgroud)
当我打印时mylist,我得到以下内容:
[5,4]
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会这样.但是,当我在声明后添加一个print语句时,if我得到了正确的答案:
for item in mylist:
if item%2==1:
mylist.remove(item)
print mylist
Run Code Online (Sandbox Code Playgroud)
产量:
[4]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我错过了什么?
在迭代它时就地修改列表是个坏主意.当您迭代它时列表会发生变化,您的迭代会继续进行,就好像列表没有改变一样 - 产生奇怪的结果.
最好的解决方案是构建一个新列表 - 最好使用列表理解:
mylist = [item for item in mylist if item % 2 == 0]
Run Code Online (Sandbox Code Playgroud)
如果必须修改列表,可以在之后(mylist[:] = ...)返回值,但不一定需要就地修改它.
这也具有可读性和简洁性的优点.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |