使用列表推导更多一个字符串

时间:2014-08-18 00:46:41

标签: python list filter list-comprehension

我正在使用包含网址的列表,并希望过滤掉.jpg,jpeg和.png等扩展名。

我尝试使用列表理解:[elem for elem in li if elem!=“.jpg”]但这只会过滤一个字符串。

有没有办法解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:2)

不是检查元素是否与单个字符串相等,而是检查元素是否存在于集合中,其中集合的每个成员都是您要匹配的字符串:

blacklist = set(['.jpg', '.jpeg', '.png'])
filtered = [elem for elem in li if elem not in blacklist]

但是,您提到您正在尝试从网址列表中过滤扩展程序,这表明您需要专门检查字符串是否以扩展名结尾,而不是整个字符串等于扩展名。在这种情况下,您真的想要这样做:

blacklist = ('.jpg', '.jpeg', '.png')
filtered = [elem for elem in li if not elem.endswith(blacklist)]

这可确保elem不会以blacklist中的任何项目结束。