0

このスクリプトは、可能な数の Web サイトから、必要なデータを持っている Web サイトを特定します。は、すべての有効な URL のインデックスのリストを返すzを介してすべての潜在的な Web サイトを実行します。また、無効だった Web サイトの値data_grabber(item)も含まれます。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]ます。これに関する唯一の問題は、可能な Web サイトのリストが非常に長くなる可能性があることです。そのためNonez. アイテムzの生成を防ぐことはできますか?None助けてくれてありがとう。

data_grabber編集:実際にはほとんどの時間がかかっていることに気付きました。それでもこれを知ってよかったです。

4

1 に答える 1

3

@DSMに同意します。これにより、時間がかかりすぎる可能性は低いと思われます。しかし、これはそれを回避します:

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

角かっこの代わりに括弧を使用すると、結果のジェネレーターが作成data_grabberfilterれ、結果が消費され、sを含む中間リストを作成せずに結果リストが作成Noneされます。


タイミングについてのあなたの主張の単なるテスト:

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

まったく同じではありませんが、これにより100,000のリストが作成Noneされ、コンピューター上で9ミリ秒ですべてがフィルターで除外されます。

于 2012-11-03T02:17:03.247 に答える