我们正在构建一个Web爬虫,其任务是创建一个输出关键字和附加到关键字的URL的函数。关键字不能在列表中重复。这是最终的代码:
index = []
def add_to_index(index,keyword,url):
for entry in index:
if entry[0] == keyword:
entry[1].append(url)
return
index.append([keyword,[url]])
输入:
add_to_index(指数, 'udacity', 'http://udacity.com')
add_to_index(指数, '计算', 'http://acm.org')
add_to_index(指数, 'udacity', 'http://npr.org')
这些是正确的结果:
[['udacity', ['http://udacity.com', 'http://npr.org']],
['computing', ['http://acm.org']]]
我真的很难理解这个功能。第一件事是它在函数中说不重复keyword
?
据我所知,语句index.append([keyword,[url]])
应该将keyword
Udacity两次添加到index
列表中,如果我将上述语句添加到事实中它确实添加了两次for
循环。所以,我真的不明白它在for
循环中指定不在列表中重复keyword
的位置?
该函数似乎在说:如果url
匹配,则将index
附加到keyword
列表,如果不匹配,则跳出循环并添加{{1}和它的keyword
。
第二件事我真的不明白为什么url
语句位于index.append([keyword,[url]])
循环的底部,而不是它之上。如果我把它放在顶部,它会给我完全不同的结果。如图所示:
for
为什么呢?当语句在index = []
def add_to_index(index,keyword,url):
index.append([keyword,[url]])
for entry in index:
if entry[0] == keyword:
entry[1].append(url)
return
[['udacity', ['http://udacity.com', 'http://udacity.com', 'http://npr.org']],
['computing', ['http://acm.org', 'http://acm.org']],
['udacity', ['http://npr.org']]]
循环之后,由于for
为空,因此不会返回任何内容。所以,我不明白为什么把声明置于顶部不会产生相同的结果?
我真的很难理解这一点,我完全是空白。任何帮助将非常感激。非常感谢! :)
答案 0 :(得分:3)
有return
语句导致函数在找到匹配关键字后退出。这意味着只有在函数无法在集合中找到匹配的关键字时才能执行index.append([keyword,[url]])
。
index = []
def add_to_index(index,keyword,url):
for entry in index:
if entry[0] == keyword:
# We have found a matching keyword, so add the url to list of urls and exit the function
entry[1].append(url)
return
# We didn't find a matching keyword so add a new keyword, url list to the collection
index.append([keyword,[url]])