Python 为什么我需要指定此列表的大小,否则会导致列表索引超出范围错误

Python 为什么我需要指定此列表的大小,否则会导致列表索引超出范围错误,python,arrays,Python,Arrays,我正在尝试解析网页中的URL列表。我做了以下几件事: 有所有“a”标签的列表 使用for循环来get(“href”) 在循环过程中,我一直将get值分配给一个名为links的新空列表 但我一直得到一个索引超出范围的错误。我想这可能是因为我增加链接索引的方式,但我确信情况并非如此。 这是容易出错的代码: import urllib import bs4 url = "http://tellerprimer.ucdavis.edu/pdf/" response = urllib.urlopen(ur

我正在尝试解析网页中的URL列表。我做了以下几件事:

  • 有所有“a”标签的列表
  • 使用for循环来
    get(“href”)
  • 在循环过程中,我一直将get值分配给一个名为links的新空列表
  • 但我一直得到一个索引超出范围的错误。我想这可能是因为我增加链接索引的方式,但我确信情况并非如此。 这是容易出错的代码:

    import urllib
    import bs4
    url = "http://tellerprimer.ucdavis.edu/pdf/"
    response = urllib.urlopen(url)
    webpage = response.read()
    soup = bs4.BeautifulSoup(webpage, 'html.parser')
    i = 0
    links = []
    
    for tags in soup.find_all('a'):
        links[i] = str(tags.get('href'))
        i +=1
    print i, links
    
    我给了链接一个固定的长度,它固定了它,就像这样:

    links=[0]*89#89是汤的长度。查找所有('a')


    我想知道是什么导致了这个问题。

    您正试图将某些内容分配给一个不存在的索引。创建
    链接时,将其创建为空列表

    然后你可以链接[i]
    ,但是
    links
    是空的,所以没有
    i
    th索引

    正确的方法是:

    links.append(str(tags.get('href')))
    
    这也意味着您可以消除
    i
    变量。不需要



    这将打印
    链接列表中的所有89个链接

    列表最初为空,因此您试图将值分配给列表中不存在的索引位置

    使用
    append()
    将项目添加到列表中:

    links = []
    
    for tags in soup.find_all('a'):
         links.append(str(tags.get('href')))
    
    或者改用
    map()

    links = map(lambda tags: str(tags.get('href')), soup.find_all('a'))
    
    或者使用列表:

    links = [str(tags.get('href')) for tags in soup.find_all('a')]
    

    links.append(str(tags.get('href'))
    Ah,明白了。非常感谢。奇怪的是,我以前使用过列表,但从未得到过这种场景。哦,伙计,map()简单多了。我现在觉得自己很愚蠢。但是,谢谢你。这里lambda只是一个函数的占位符,对吗?
    lambda
    只允许您指定一个匿名函数。您可以改为引用命名函数。可能应该能够摆脱
    list()
    部分。我将删除它。我查看了
    map()
    的工作原理,不知道为什么要使用
    lambda标记:
    或它的作用。还有为什么需要
    list()
    ?没有它,它工作得很好。
    links = [str(tags.get('href')) for tags in soup.find_all('a')]