python-for-list索引超出范围

时间:2014-05-21 21:42:23

标签: python

我是Python的初学者。有人可以指出它为什么一直在说

Traceback (most recent call last):
  File "C:/Python27/practice example/datascraper templates.py", line 21, in <module>
    print findPatTitle[i]
IndexError: list index out of range

非常感谢。

以下是代码:

from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import re

webpage=urlopen('http://www.voxeu.org/').read()

patFinderTitle=re.compile('<title>(.*)</title>')      ##title tag
patFinderLink=re.compile('<link rel.*href="(.*)"/>')  ##link tag

findPatTitle=re.findall(patFinderTitle,webpage)
findPatLink=re.findall(patFinderLink,webpage)

listIterator=[]
listIterator=range(2,16)

for i in listIterator:
    print findPatTitle[i]
    print findPatLink[i]
    print '/n'

2 个答案:

答案 0 :(得分:2)

错误消息完全具有描述性。

您正尝试将一个硬编码的索引范围(2,16)访问到findPatTitle,但您不知道有多少项。

如果要同时迭代多个类似的集合,请使用zip()

for title, link in zip(findPatTitle,  findPatLink):
    print 'Title={0} Link={1}'.format(title, link)

答案 1 :(得分:0)

问题是您的结果数量与预期不同。不要硬编码。但是,让我们重写这个更加pythonic:

替换它:

listIterator=[]
listIterator=range(2,16)

for i in listIterator:
    print findPatTitle[i]
    print findPatLink[i]
    print '/n'

将两个列表zipped放在一起:

for title, link in zip(findPatTitle, findPatLink):
    print title
    print link
    print '/n'

这将同时循环两次,无论列表多长。 1个元素或100个元素,没有区别。