-1

我一定错过了一些基本的东西,因为我使用 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 文件被弹出。

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

4

1 回答 1

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']
于 2013-08-04T18:34:11.113 回答