Python检查列表中是否存在刮取的元素

标签 python indexing

当我在 python 中使用 if else 语句时,我不断收到错误。我希望我的脚本检查索引是否存在,如果存在则运行代码,如果不存在则运行另一个代码。我收到错误 ValueError: 'Named Administrator' is not in list

import requests
from bs4 import BeautifulSoup
url_3 = 'https://www.brightscope.com/form-5500/basic-info/107299/Orthopedic-Institute-Of-Pennsylvania/15801790/Orthopedic-Institute-Of-Pennsylvania-401k-Profit-Sharing-Plan/'
page = requests.get(url_3)
soup = BeautifulSoup(page.text, 'html.parser')
divs = [e.get_text() for e in soup.findAll('span')]


if divs.index('Named Administrator'):
    index = divs.index('Named Administrator')
    contact = divs[index + 1]
else:
    contact = '-'

最佳答案

不要执行索引,而是执行__contains__测试:

if 'Named Administrator' in divs:

仅当Named Administrator确实存在于divs列表中时才继续前进,这样您就不会收到ValueError

<小时/>

另一个考虑因素是列表中的成员资格测试具有 O(N) 时间复杂度,因此如果您要对大型列表执行此操作,则可能会使用集合:

{e.get_text() for e in soup.findAll('span')}

但由于集合是无序的,您将无法使用index-ing。

因此,要么考虑其他也适用于集合的方法,即不需要通过索引获取下一个值。

或者您可以使用一组进行成员资格测试,并使用列表来获取下一个值。根据您的实际情况,这里的成本可能会更高或更低,您只能通过分析来发现:

divs_list = [e.get_text() for e in soup.findAll('span')]
divs_set = set(divs_list)

if 'Named Administrator' in divs_set:
    index = divs_list.index('Named Administrator')
    contact = divs_list[index + 1]

关于Python检查列表中是否存在刮取的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138137/

相关文章:

python - python wx中打开子窗口时关闭父窗口

c - 尝试在 C 中引用值时出现 LValue 错误

javascript - JS 将单个索引中的 2 个数组及其各个值合并到 1 个数组中的单个索引中

sql - 我需要在 SQL Server 2008 数据库中使用这么多索引吗?

python - 确定请求的速率限制

python - 获取嵌套字典与列表的组合数

python - Jupyter Notebook 中未返回 Plotly 表

带有空格的python字符串输入问题!

MySQL 不使用我的索引,而它在解释语句中声明它会使用我的索引

sql-server - SQL Server 不会使用我的索引