如何使for循环跑得更快?

2024-06-05 23:00:11 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的for循环。运行100000次迭代需要很长时间。在

for urlt in xrange(0, len(clean_url_data)):
    website_title.append(urlt)
    website_title[urlt]=g.extract(clean_url_data[urlt]).title
    print urlt

Tags: incleanurlfordatalentitleextract
3条回答

与其使用website_title.append(urlt)扩展website_title列表,然后立即用标题数据覆盖urlt项,不如直接将标题数据追加到列表中。在

另外,最好直接在clean_url_data列表上迭代,而不是使用整数循环来索引clean_url_data。如果需要索引,可以使用enumerate。像这样:

website_title = []
for i, url in enumerate(clean_url_data):
    website_title.append(g.extract(url).title)
    print i

如果你真的不需要这个索引,你可以让事情变得更简单。下面是一种使用列表理解的方法,它比在循环中使用append要快一些。在

^{pr2}$

list comprehension使用一个特殊的list_APPEND字节码,它基本上是一个运算符,因此它比查找列表的.append方法快;调用Python函数比执行操作符相对较慢。在

正如galaxyan提到的,您可以使用多处理来实现这一点。下面是一个示例片段:

def clean(url):
    return {'url': url, 'title': g.extract(url).title}

from multiprocessing import Pool
pool = Pool()
website_info = pool.map(clean, clean_url_data)

请尝试比较range()xrange()map()g.extract可能会花费您的时间。在

def set_website_title(urlt):
    if urlt not in website_title:
        website_title.append(urlt)
        website_title[urlt] = g.extract(clean_url_data[urlt]).title
        print urlt

if __name__ == "__main__":
    map(set_website_title, clean_url_data)

相关问题 更多 >