zoukankan      html  css  js  c++  java
  • python的数据结构整理002列表,字典,集合,怎么选?

    列表,字典,集合,怎么选?

    假设现在有一个电商后台存了产品的ID和价格。有一个需求是给定ID如何找出对应价格?

    如果使用列表来存储数据结构,并进行查找,那么代码如下。

    # products list version
    def FindProductPrice(products,product_id):
        for id, price in products:
            if id == product_id:
                return price
        return none
    
    products = [(10001001,100),(10001002,120),(10001003,130)]
    print("The price of product 10001003 is {}.".format(FindProductPrice(products,10001003)))
    

    如果使用字典来存储数据结构,那么查找代码如下。

    # products dict version
    products = {10001001:100,10001002:120,10001003:130}
    print("The price of product 10001003 is {}.".format(products[10001003]))
    

    当需求变为找出商品有多少种不同的价格的时候怎么办?

    列表版本。

    # list version
    def FindUniquePriceUsingList(products):
        UniquePriceList = []
        for _, price in products:
            if price not in UniquePriceList:
                UniquePriceList.append(price)
        return len(UniquePriceList)
    products = [(10001001,100),(10001002,120),(10001003,130)]
    print("Number of unique price is {}.".format(FindUniquePriceUsingList(products)))
    

    集合版本。

    # set version
    def FindUniquePriceUsingSet(products):
        UniquePriceSet = set()
        for _, price in products:
            UniquePriceSet.add(price)
        return len(UniquePriceSet)
    products = [(10001001,100),(10001002,120),(10001003,130)]
    print("Number of unique price is {}.".format(FindUniquePriceUsingSet(products)))
    

    列表版本和集合版本的性能比较,可以明显的看到集合版本节省了大量的时间。

    import time
    id = [x for x in range(0, 100000)]
    price = [x for x in range(200000, 300000)]
    products = list(zip(id, price))
    
    # list version
    StartUsingListTime = time.perf_counter()
    FindUniquePriceUsingList(products)
    EndUsingListTime = time.perf_counter()
    print("time elapse using list: {}".format(EndUsingListTime - StartUsingListTime))
    
    # set version
    StartUsingSetTime = time.perf_counter()
    FindUniquePriceUsingSet(products)
    EndUsingSetTime = time.perf_counter()
    print("time elapse using set: {}".format(EndUsingSetTime - StartUsingSetTime ))
    
    
    time elapse using list: 31.758130708999943
    time elapse using set: 0.004608834000009665
    
  • 相关阅读:
    LCPhash求解
    BSGS
    洛谷—— P1849 [USACO12MAR]拖拉机Tractor
    BZOJ——2101: [Usaco2010 Dec]Treasure Chest 藏宝箱
    洛谷—— P1561 [USACO12JAN]爬山Mountain Climbing
    BZOJ——1601: [Usaco2008 Oct]灌水
    洛谷—— P1342 请柬
    [SDOI2009]Elaxia的路线 SPFA+Topo
    1737 配对
    51Nod 1378 夹克老爷的愤怒
  • 原文地址:https://www.cnblogs.com/jason007/p/15717056.html
Copyright © 2011-2022 走看看