如何防止它返回一个长的无值列表?

2024-10-05 14:29:49 发布

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

这个脚本决定了在可能的网站数量中哪些网站有我想要的数据。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项?提前谢谢你的帮助。你知道吗

编辑:现在我意识到它实际上占用了大部分时间。不过还是很高兴知道这个。你知道吗


Tags: incomnoneurl列表fordata网站
1条回答
网友
1楼 · 发布于 2024-10-05 14:29:49

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

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

使用括号而不是括号将生成data_grabber结果的生成器,然后filter将使用这些结果,构建结果列表,而不必生成包含None的中间列表。你知道吗


只是测试一下你关于时间安排的说法:

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

不完全一样,但这会生成一个100000None的列表,然后在我的计算机上用9毫秒过滤掉它们。你知道吗

相关问题 更多 >