【发布时间】:2014-08-18 00:46:40
【问题描述】:
我正在处理一个包含 url 的列表,并希望过滤掉 .jpg、jpeg 和 .png 等扩展名。
我尝试使用列表推导:[elem for elem in li if elem != ".jpg"] 但这只会过滤一个字符串。
有没有办法解决这个问题?
谢谢。
【问题讨论】:
标签: python list filter list-comprehension
我正在处理一个包含 url 的列表,并希望过滤掉 .jpg、jpeg 和 .png 等扩展名。
我尝试使用列表推导:[elem for elem in li if elem != ".jpg"] 但这只会过滤一个字符串。
有没有办法解决这个问题?
谢谢。
【问题讨论】:
标签: python list filter list-comprehension
不要检查元素与单个字符串的相等性,而是检查元素是否存在于集合中,其中集合的每个成员都是要匹配的字符串:
blacklist = set(['.jpg', '.jpeg', '.png'])
filtered = [elem for elem in li if elem not in blacklist]
但是,您提到您正在尝试从 url 列表中过滤扩展名,这表明您需要专门检查字符串是否以扩展名结尾,而不是整个字符串等于扩展名。在这种情况下,你真的很想这样做:
blacklist = ('.jpg', '.jpeg', '.png')
filtered = [elem for elem in li if not elem.endswith(blacklist)]
这确保elem 不会以blacklist 中的任何项目结尾。
【讨论】: