Python基础:字典(dict)与集合(set)
2019-05-22 06:32:29来源:博客园 阅读 ()
字典与集合之所以高效的原因是:内部结构都是一张哈希表。
平均情况下插入、查找和删除的时间复杂度为 O(1).
查找场景下与列表的性能对比
假设有数量100,000的产品列表:
import time id = [x for x in range(0, 100000)] price = [x for x in range(200000, 300000)] products = list(zip(id, price)) #products # [(0, 200000), (1, 200001)....(99999, 299999)]
要统计出总共有多少种不同的价格,分别用列表list与集合set来作为存储的数据结构,来对比下性能。
用列表作为数据结构:
# # 计算列表版本的时间 # list version 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) start_using_list = time.perf_counter() find_unique_price_using_list(products) end_using_list = time.perf_counter() print("time elapse using list: {}".format(end_using_list - start_using_list))
#time elapse using list: 53.206719899999996
用集合作为数据结构:
# # 计算集合版本的时间 # set version 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) start_using_set = time.perf_counter() find_unique_price_using_set(products) end_using_set = time.perf_counter() print("time elapse using set: {}".format(end_using_set - start_using_set))
#time elapse using set: 0.009022799999996778
从结果可以看出,性能差异非常大,使用合适的数据结构非常重要。
Dict与Set基础
- 集合不支持索引操作
- 判断元素是否在dict/set中用 in 操作符
dict1 = {'a':1,'b':2} print('a' in dict1) #True print(1 in dict1) #False set1 = {'a','b','c'} print(1 in set1) #False print('b' in set1) #True
3.集合的pop()方法是随机返回一个元素,并把集合中的该元素删除
4.集合与字典的排序
#字典排序 d = {'b': 1, 'a': 2, 'c': 10} d_sorted_by_key = sorted(d.items(), key=lambda x: x[0]) # 根据字典键的升序排序 d_sorted_by_value = sorted(d.items(), key=lambda x: x[1]) # 根据字典值的升序排序 d_sorted_by_key [('a', 2), ('b', 1), ('c', 10)] d_sorted_by_value [('b', 1), ('a', 2), ('c', 10)] #集合排序 s = {3, 4, 2, 1} sorted(s) # 对集合的元素进行升序排序 [1, 2, 3, 4]
参考资料:
极客时间《Python核心技术与实战》专栏
原文链接:https://www.cnblogs.com/xiaoguanqiu/p/10885263.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:python爬虫利器,you-get,让天下没有难爬的网页
下一篇:字符串与编码
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash