【问题标题】:FIltering more then one string with list comprehension用列表理解过滤一个以上的字符串
【发布时间】:2014-08-18 00:46:40
【问题描述】:

我正在处理一个包含 url 的列表,并希望过滤掉 .jpg、jpeg 和 .png 等扩展名。

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

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

谢谢。

【问题讨论】:

    标签: python list filter list-comprehension


    【解决方案1】:

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

    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 中的任何项目结尾。

    【讨论】:

    • 超越一切,举起我的圣杯!
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多