首页 > 解决方案 > 列表理解中的多个 if 条件

问题描述

我有一个包含链接的列表,并试图过滤这些链接并卡住了。我能够显式地为多个 if 语句编写一个函数,但希望直接在列表理解中编写它。

我尝试了多种方法(i.startswith(), "https" in i)来编写它,但无法弄清楚。

这是列表理解:

[i.a.get('href') for i in link_data if i != None]

输出:

['/gp/redirect.html/ref=as',
'https://www.google.com/',
'https://www.amazon.com/',
'/gp/redirect.html/ref=gf']

我只需要以 . 开头的链接https

如果条件在上面给出的列表理解中,我该如何写?任何帮助表示赞赏。

标签: pythonpython-3.x

解决方案


您可以将两个条件与and-- 结合使用,但列表推导也支持多个ifs(使用 s 进行评估and

这是您想要的两个选项:

# combining conditions with `and`
output = [
    i.a.get('href') for i in link_data
    if i is not None and i.a.get('href').startswith('https')
]

# combining conditions with multiple `if`s
output = [
    i.a.get('href') for i in link_data
    if i is not None
    if i.a.get('href').startswith('https')
]

(注意这些是为了清楚起见而缩进的,[和之间的空格]并不重要)


推荐阅读