0

dicts の 2 つのリストがあります: prices_distincts, prices.

それらは を介し​​て接続されhash_brand_artnum、両方とも次のようにソートされhash_brand_artnum ています。

  1. 長さprices_distinctsが100,000の場合、それは機能します30 min

  2. ただし、長さprices_distinctsが 10,000 の場合は で機能し10 secます。

コード:

 prices_distincts = [{'hash_brand_artnum':1202},...,..]
 prices = [{'hash_brand_artnum':1202,'price':12.077},...,...]

 for prices_distinct in prices_distincts:
    for price in list(prices):            
        if prices_distinct['hash_brand_artnum'] == price['hash_brand_artnum']:

            print price['hash_brand_artnum']
            #print prices
            del prices[0]
        else:
            continue

同じ価格の商品を探す必要があります。price_distincts と価格の 1 対多の関係。同一価格のグループ価格['hash_brand_artnum']

4

3 に答える 3

10

あなたのアルゴリズムは O(N^2) と 100000 ^ 2 = 10000000000 と 10000 ^ 2 = 100000000 であるため、非常に長く機能しています。したがって、2 つの数値の間の因数は 100 であり、30 分と 10 秒の間の因数は ~100 です。

編集:あなたのコードとそのような少量のデータで言うのは難しく、あなたの仕事が何であるかはわかりませんが、あなたの辞書はあまり役に立たないと思います. これを試してみてください:

>>> prices_distincts = [{'hash_brand_artnum':1202}, {'hash_brand_artnum':14}]
>>> prices = [{'hash_brand_artnum':1202, 'price':12.077}, {'hash_brand_artnum':14, 'price':15}]
# turning first list of dicts into simple list of numbers
>>> dist = [x['hash_brand_artnum'] for x in prices_distincts]
# turning second list of dicts into dict where number is a key and price is a value
>>> pr = {x['hash_brand_artnum']:x["price"] for x in prices}

番号を繰り返し処理して価格を取得することはできません。

>>> for d in dist:
...     print d, pr[d]
于 2013-07-30T14:07:28.860 に答える
5

@RomanPekar が述べたように、その複雑さはO(n^2). O(n)それを修正するには、アルゴリズムとして書く必要があります:

import itertools as it

for price, prices_distinct in it.izip(prices, prices_distincts):
    if prices_distinct['hash_brand_artnum'] == price['hash_brand_artnum']:
        # do stuff
于 2013-07-30T14:09:14.650 に答える
0

price_distincts で価格が多かれ少なかれ増加する場合、prices_distincts のサイズを 10 倍すると、元の 10 秒は 10 倍になり、さらに 10 倍 (ループの場合は 2 秒) になり、"list(価格)」(ちなみに、これは間違いなくループの外で行う必要があります):

10秒*10*10*2 = 2000秒 = 33分

通常、この変換にはコストがかかります。

 prices_distincts = [{'hash_brand_artnum':1202},...,..]
 prices = [{'hash_brand_artnum':1202,'price':12.077},...,...]
 list_prices = list(prices)

 for prices_distinct in prices_distincts:
    for price in list_prices:            
        if prices_distinct['hash_brand_artnum'] == price['hash_brand_artnum']:

            print price['hash_brand_artnum']
            #print prices
            del prices[0]
        else:
            continue
于 2013-07-30T14:42:28.690 に答える