gpt4 book ai didi

python - 在一行代码中计算所有
    中的
  • 和计算所有特定的

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:34 25 4
gpt4 key购买 nike

我写了一个 Python 代码来通过 Beautiful Soup 分析网页。

代码完成后,我开始删除不必要的变量和行。

如果可能的话,我也在尝试删除 for 循环。

例如,我想用一行代码(例如 len(an object) )替换这两个循环(在两个不同的文件中):

(1) 计数 <li>总共<ul>

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
list = soup.find_all('ul',{'class':'class-name'})
counter = 0
for ul in list:
for li in ul:
counter += 1

哪里list对象是这样的

[<ul class="class-name">
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li></ul>,
<ul class="class-name">
<li class="section"><a href="...">...</a></li>
<li class="section"><a href="...">...</a></li></ul>]

(2) 计数所有特定<a>

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
list = soup.find('table',{'class':'class-name'}).find_all('a')
counter = 0
for el in list:
if el.contents[0] != 'Train':
counter += 1

哪里list有点像

[<a href="…">Train</a>,
<a href="…">Car</a>,
<a href="…">Plane</a>]

我尝试了什么

使用 numpy , 但命令 np.array(list)np.asarray(list)在这两种情况下都会出错:

Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
np.array(list)
File "C:\...\Python37-32\lib\site-packages\bs4\element.py", line 1016, in __getitem__
return self.attrs[key]
KeyError: 0

在情况 (2) 中,我尝试使用切片符号逐个元素地检索,但命令如 list[1:3]返回另一个数组。因此,例如这段代码,它试图获取 total length minus the number of elements whose contents[0] is 'Train' , 不起作用:

counter = len(list) - (list[:].contents[0] == 'Train')

是否可以用一行代码代替两个循环?

最佳答案

对于第一个循环:

counter = sum(1 for ul in list for li in ul)

对于第二个:

counter = sum(1 for el in list if el.contents[0] != 'Train')

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com