# 找出商品中有多少种价格
products = [
(143442, 100),
(122344, 30),
(132991, 50),
(133333, 30)
]
# 法1:
# list实现;A & B两次循环,查找时间复杂度为O(n),最坏时间复杂度为O(n^2)
def find_unique_price_using_list(products):
unique_price_list = []
for _, price in products: # A
if price not in unique_price_list: # B
unique_price_list.append(price)
return len(unique_price_list)
print('unique price is %s' % find_unique_price_using_list(products))
# 法2:
# set 实现; set为哈希表,无重复元素,添加和查找都为O(1),总为O(n)
def find_unique_price_using_set(products):
unique_price_set = set()
for _, price in products:
unique_price_set.add(price)
return len(unique_price_set)
print('unique price is %s' % find_unique_price_using_set(products))
# 测试
import time
id = [x for x in range(0, 100000)]
price = [x for x in range(200000, 300000)]
products1 = list(zip(id, price))
st = time.perf_counter()
find_unique_price_using_list(products1)
en = time.perf_counter()
print('list: %.5f' % (en-st))
st = time.perf_counter()
find_unique_price_using_set(products1)
en = time.perf_counter()
print('set: %.5f' % (en-st))
# Output:
unique price is 3
unique price is 3
list: 94.21120
set: 0.02036
高效的 set
最新推荐文章于 2021-10-19 13:41:25 发布