【问题标题】:Why iteration over bs4.element.ResultSet makes no copy of original?为什么迭代 bs4.element.ResultSet 不会复制原始文件?
【发布时间】:2016-05-24 08:58:49
【问题描述】:

Beautifulsoup ResultSets 上的迭代行为让我有些困惑。一般来说,在 python 中,我希望迭代生成每个元素的副本。无法通过为迭代元素分配新值来修改列表。

l1 = [1,2,3]
for elem in l1:
    elem = elem + 10

不会修改原始列表 l1

但如果我这样做:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

for elem in soup('body'):
    elem.unwrap()

然后修改原来的soup元素!

这对我来说似乎不一致,但很明显我在这里遗漏了一些基本的东西

我正在使用 python 3.5 和 BS 4.4.1

提前致谢

【问题讨论】:

    标签: python-3.x beautifulsoup iteration


    【解决方案1】:

    好吧,这是初学者的错误。当迭代汤元素时,我们正在迭代可变元素,因此对副本组件的修改仍会反映到原始变量上

    l1 = [[1,1],[2,2]]
    for elem in l1:
        elem[1] = 5555
    

    会发货

    l1 = [[1,5555],[2,5555]]
    

    bs 标签的迭代行为相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2015-12-01
      • 2014-01-26
      • 1970-01-01
      相关资源
      最近更新 更多