【问题标题】:Getting the next item in a python for loop获取python for循环中的下一项
【发布时间】:2018-05-19 16:11:09
【问题描述】:

如果找到“X”,我有一个包含列表的 HTML 对象,我想打印 x 和列表中的下一项:

for string in tr[30].strings:
      if string == 'X':
              print(string)
              print(string.next())

得到错误:

TypeError: 'NavigableString' 对象不可调用

【问题讨论】:

  • Much, much 更容易:跟踪上一项。在循环结束时将每个string 存储到previous 中,然后只需检查if previous == 'X':,此时string'X' 之后的“下一个”值。
  • 如果你使用string.next而不是string.next()会发生什么?
  • 值得注意的是,到目前为止,没有一个答案针对 NavigableString 对象...所以它们可能比给出的一般方法有更好的选择。
  • @MartijnPieters 我用了你的方法,效果很好。 >>> for string in tr[30].strings: ... if string != '\n': ... if previous == 'X': ... print(string) ... previous = string

标签: python python-3.x beautifulsoup


【解决方案1】:

你可以使用enumerate,例如:

strings = tr[30].strings 

for index, string in enumerate(strings):
    if string == 'X':
        print(string)
        print(strings[index + 1])

【讨论】:

  • 试过了,出错了。 TypeError:“生成器”对象不可下标
【解决方案2】:

试试这个:

theIterator = iter(tr[30].strings)

for string in theIterator:
      if string == 'X':
              print(string)
              print(next(theIterator))

但请注意,不建议操作正在运行的 for 循环的迭代器。

【讨论】:

  • next 不是这样调用的。如果stringX,您将跳过string,而在OP 问题中并非如此。
  • 您应该使用next(theIterator).next 仅适用于 Python 2。
  • @EricDuminil 目前尚不清楚 OP 对于这种行为到底想要什么(好吧,我本来可以问的)
  • @juanpa.arrivillaga 谢谢
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 2011-12-22
  • 2012-11-19
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多