我试图在包含其他文件夹的文件夹中列出所有png文件。这是我的密码。
import os
filelist=os.listdir('images')
for fichier in filelist:
if not(fichier.endswith(".png")):
filelist.remove(fichier)
print(filelist)
问题是,最后一次打印显示一些子文件夹(但不是全部)逃过了筛选。。。
['aa.png', 'Nouveau dossier - Copie', 'Nouveau dossier - Copie (3)', 'Nouveau dossier - Copie (5)', 'zz.png']
我做错什么了?
小结:永远,永远,永远修改正在迭代的列表。
相反,在副本上迭代:
或者,如果您不想进行不必要的复制,请反向迭代(这只有在您能够保证列表中的项是唯一的时才有效;对于文件系统,这是一个很好的假设):
请注意,您可以使用Python的
glob
模块来简化:为什么
在Python中遍历列表时,Python实际上是在后台遍历列表的索引。你可以看到这是一个巨大的问题,每当你真正删除的项目:
从这里打印的内容可以看出跳过了第二个2,并且
l
的值为[1, 2, 3]
。这是因为,只要到达并移除前2个,索引就是1
(第二个元素)。在下一次迭代中,索引是2
。此时,l == [1,2,3]
,所以x == 3
。如果运行代码,可能比这个解释更明显。在遍历列表时不应修改列表。它会导致有趣的事情发生。
最好使用列表理解:
相关问题 更多 >
编程相关推荐