我如何防止它返回一长串无值的列表



此脚本确定可能数量的网站中哪些网站具有我想要的数据。z通过data_grabber(item)运行所有潜在网站,该网站返回所有有效URL的索引列表。它还包括无效网站的None值。

import requests
a = range(0, 10)
b = 'http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=%r'
websites = []
for i in a:
    result = b % a[i]
    websites.append(result)
def data_grabber(item): 
    url = item
    r = requests.get(url, headers={'Referer': 'www.grandexchangecentral.com'})
    data = r.json
    if data != None:
        return websites.index(item)
z = [data_grabber(x) for x in websites]
z1 =  filter(None, z) 

这返回[None, None, 2, None, None, None, 6, None, 8, None]z1缩短为[2, 6, 8]。唯一的问题是,可能的网站列表可能会变得很长,因此在z中生成许多None占位符可能需要几分钟。是否可以防止z生成None项目?预先感谢您的任何帮助。

编辑:现在我意识到实际上是data_grabber大部分时间。仍然很高兴知道这一点。

我同意@DSM的观点,似乎这不太可能花费您太多的时间。但这将避免这种情况:

filter(None, (data_grabber(x) for x in websites))

使用括号而不是括号将成为data_grabber结果的生成器,然后filter将消耗,构建结果列表,而无需在其中使用None S进行中间列表。


只是您对时间的主张的测试:

>>> %timeit filter(None, [None for x in range(100000)])
100 loops, best of 3: 9.22 ms per loop

不是完全相同的东西,但这列出了100,000 None s的列表,然后在我的计算机上以9毫秒的方式将它们全部过滤。

相关内容

  • 没有找到相关文章

最新更新