解释 sum(int(td.text) for td in soup.select('td:last-child')[1:])



我在解决问题时遇到了这段代码。我只是无法理解print之前的最后一行代码是如何工作的。请解释一下。

import re
import urllib.request
from bs4 import BeautifulSoup
# url = 'http://py4e-data.dr-chuck.net/comments_42.html'
url = 'http://py4e-data.dr-chuck.net/comments_228869.html'
soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'html.parser')
s = sum(int(td.text) for td in soup.select('td:last-child')[1:])
print(s)

这是操作顺序:

  • soup.select('td:last-child')是一种返回所选元素list的方法
  • [1:]是一个切片操作 - 它创建一个新列表,跳过列表中的第一个(零个)项
  • for td in是一个循环,其中列表的项目依次分配给td
  • int(td.text)td中获取对象的"text"属性,然后创建其整数等效
  • sum()生成这些整数时对其进行求和

您可以分解以下作业...

s = sum(int(td.text) for td in soup.select('td:last-child')[1:])

。分为几个语句:

all_td = soup.select('td:last-child') # get all last TD elements in each TR
rest_td = all_td[1:]  # skip the first TD among those
s = 0  # for accumulating a sum
for td in rest_td:
val = int(td.text)  # parse the text in the TD as an integer
s += val  # add that number to the running sum

现在,您可以使用调试器逐步执行这些语句,或者在此处和那里添加一些打印调用,以查看发生了什么。

最新更新