Python-FOR循环按文件扩展名删除列表项



我一定缺少一些基本的东西,因为我使用python已经有一段时间了。我有一个简单的函数,我想从目录中返回.jpg的列表,但它也返回其他文件。

import os
def myFunction(directory):
    pictures = os.listdir(directory)
    for i,v in enumerate(pictures):
        if v[-3:] != 'jpg':
            pictures.pop(i)
    return sorted(pictures)

同一目录中有.gif和.htm文件。.gif文件没有随列表返回,但.htm文件是。如果我在解释器中运行此循环,我可以看到.gif文件被弹出,然后如果我再次运行循环,.htm文件被弹出。

我错过了什么?谢谢你的帮助。

在迭代列表时不应该更改列表。这会破坏索引。

使用列表理解:

>>> pictures = ['abc.jpg', 'abc.gif', 'abc.png', 'cde.jpg']
>>> [pic for pic in pictures if pic.endswith('jpg')]
['abc.jpg', 'cde.jpg']

filter()lambda():

>>> filter(lambda pic: pic.endswith('jpg'), pictures)
['abc.jpg', 'cde.jpg']

最新更新