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

时间:2013-08-04 18:32:46

标签: python python-2.7

我必须遗漏一些基本的东西,因为我已经使用了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文件。

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

1 个答案:

答案 0 :(得分:2)

迭代时不应更改列表。这将搞定索引。

使用列表理解:

>>> 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']