这是我的for循环。运行超过100,000次迭代需要很长时间。
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
答案 0 :(得分:1)
不是使用website_title
扩展website_title.append(urlt)
列表,而是立即用标题数据覆盖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
如果您真的不需要该索引,则可以使事情变得更简单。这是一种使用列表推导的方法,这比使用循环中的追加快一点。
website_title = [g.extract(url).title for url in clean_url_data]
列表推导使用一个特殊的LIST_APPEND字节码,它基本上是一个运算符,所以它比查找列表的.append
方法然后调用它更快;与执行运算符相比,调用Python函数相对较慢。
答案 1 :(得分:0)
请尝试比较范围(), xrange(), map()。 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)
可能会花费您的时间。
img{
display:block;
}
答案 2 :(得分:0)
正如galaxyan所提到的,你可以使用多处理来做到这一点。以下是一个示例代码段:
boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream)
答案 3 :(得分:0)
您要将一个数字项附加到列表website_title
,然后覆盖列表中相同项的值。我不明白这是多么有用。如果你不这样做,你的for循环会更快一些。
正如此测试所示:
# Your version, with append() and assignment
%%timeit
l = []
for n in xrange(100000):
l.append(n)
l[n] = 'something'
10个循环,最好3个循环:每个循环22.4毫秒
# Without reassignment
%%timeit
l = []
for n in xrange(100000):
l.append('something')
100个循环,最好为3:每循环16.6 ms
# even better with list comprehension
%%timeit
l = ['something' for n in xrange(100000)]
100个循环,最好为3:每循环7.86 ms