簡體   English   中英

循環工作時間過長

[英]Loop For working too long

我有兩個字典列表: prices_distinctsprices

它們通過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和價格之間的關系一對多。 和同等價格的團體價格['hash_brand_artnum']

它之所以有效,是因為您的算法是O(N ^ 2),並且100000 ^ 2 = 10000000000和10000 ^ 2 =100000000。所以兩個數之間的因數是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]

如@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

如果價格隨prices_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM