Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过循环进行迭代的python方法_Python_Beautifulsoup - Fatal编程技术网

通过循环进行迭代的python方法

通过循环进行迭代的python方法,python,beautifulsoup,Python,Beautifulsoup,我想以一种更具python风格的方式实现以下代码: odd_rows = table.findAll('tr', attrs = {'class':'odd'}) #contain all tr tags even_rows = table.findAll('tr', attrs = {'class':'even'}) for rows in odd_rows: #rows equal 1 <tr> tag rows.findAll('td')

我想以一种更具python风格的方式实现以下代码:

odd_rows = table.findAll('tr', attrs = {'class':'odd'}) #contain all tr tags
even_rows = table.findAll('tr', attrs = {'class':'even'})

for rows in odd_rows:              #rows equal 1 <tr> tag 
    rows.findAll('td')             #find all the <td> tags located in that one <tr> tag
    for row in rows.findAll('td'): #find one <td> tag
        print row                  #print that <td> tag

for rows in even_rows:
    rows.findAll('td')
    for row in rows.findAll('td'):
        print row
odd_rows=table.findAll('tr',attrs={'class':'odd'})包含所有tr标记
偶数行=table.findAll('tr',attrs={'class':'even'})
对于奇数_行中的行:#行等于1个标记
rows.findAll('td')#查找该标记中的所有标记
对于rows-in-rows.findAll('td'):#查找一个标记
打印行#打印该标记
对于偶数行中的行:
rows.findAll('td'))
对于行中的行。findAll('td'):
打印行
row.findAll('td')
显示我的逻辑

也许:

for cls in ("odd", "even"):
    for rows in table.findAll('tr', class_=cls):
        for row in rows.findAll('td'):
            print row
for row in table.findAll('tr', attrs = {'class':'odd'}) + table.findAll('tr', attrs = {'class':'even'}):
    for cell in row.findAll('td'):
        print cell
从性能的角度来看,您的原始代码更好。合并两个列表确实会使用资源

然而,除非你是为谷歌规模写代码,否则我同意这句话

程序必须是为人们阅读而编写的,而且只是为机器执行而编写的。
-Hal Abelson,《计算机程序的结构和解释》

做这件事的方法不止一种。以您认为最易于阅读的方式编写代码。计算机可以计算出细节。

也许:

for row in table.findAll('tr', attrs = {'class':'odd'}) + table.findAll('tr', attrs = {'class':'even'}):
    for cell in row.findAll('td'):
        print cell
从性能的角度来看,您的原始代码更好。合并两个列表确实会使用资源

然而,除非你是为谷歌规模写代码,否则我同意这句话

程序必须是为人们阅读而编写的,而且只是为机器执行而编写的。
-Hal Abelson,《计算机程序的结构和解释》


做这件事的方法不止一种。以您认为最易于阅读的方式编写代码。计算机可以计算出细节。

rows.findAll('td')
当您执行
rows.findAll('td')
操作时,它本身不会执行任何操作。对行中的行执行
操作时。findAll('td'):
将再次执行该操作。第一个是多余的。行
rows.findAll('td')
本身在执行
rows.findAll('td')
操作时不会执行任何操作。对行中的行执行
操作时。findAll('td'):
将再次执行该操作。第一行是多余的。如果你不关心顺序,将一组类传递给
class
,它将匹配其中任何一个元素。第二行应该是
table。findAll
table。findAll
?@JamesHallen:如果你使用的是BeautifulSoup3,
findAll
是唯一有效的
find_all
是BS4的首选语法。如果您不关心顺序,请将一个类元组传递给
class_
,它将匹配具有任意一个类的元素。第二行是
table.find_all
还是
table.findAll
?@JamesHallen:如果您使用的是BeautifullSoup3,
findAll
是唯一有效的方法
find_all
是BS4的首选语法。您能解释一下“+”的作用吗?例如,如果我有3个类类型,我需要添加3个
table.findAll()
?@JamesHallen
table.findAll
返回一个列表,因此
table.findAll(…)+table.findAll(…)
将这两个列表组合在一起,与执行
[1,2]+[3,4]
没有什么不同,你能解释一下“+”的作用吗?例如,如果我有3个类类型,我需要添加3个
table.findAll()
?@JamesHallen
table.findAll
返回一个列表,因此
table.findAll(…)+table.findAll(…)
将这两个列表组合起来,与执行
[1,2]+[3,4]