我必须遗漏一些基本的东西,因为我已经使用了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文件。
我错过了什么?谢谢你的帮助。
答案 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']