Python基础:字典(dict)与集合(set)
查找场景下与列表的性能对比
字典与集合之所以高效的原因是:内部结构都是一张哈希表。
平均情况下插入、查找和删除的时间复杂度为 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: # Aif 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
Python基础:字典(dict)与集合(set)相关推荐
- python集合set底层原理_Python进阶11_字典dict和集合set的秘密
本节你将看到关于字典dict和集合set更加深入的原理,尤其是关于散列在其中的作用,将回答以下问题:Python 里的 dict 和 set 的效率有多高? 为什么它们是无序的? 为什么并不是所有的 ...
- Python基础数据类型之set集合
Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...
- python基础—字典
阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...
- Python基础(06)——集合(set、frozenset)
Python基础(06)--集合(set.frozenset) 集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示. 1.set的定义 创建集合:集合种的集合项可以是不同数据 ...
- Python 将字典(dict)转换为DataFrame
Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典 ...
- Python遍历字典dict的几种方法(包含两个字典的遍历)
Python遍历字典dict的几种方法 单个字典的遍历 根据key遍历 示例: dict_map = {1:'hello', 2:'world'} for key in dict_map:print( ...
- 【Python基础】字典dict和集合set
今天看了一些python的字典和集合的文章,发觉底层有些东西自己不是很清楚,关于哈希和内存,网上搜了很多发现都是零星的说明,包括csdn里面都是很多杂乱的记录.通过自己搜集点东西把基础用法和实现原理都 ...
- 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...
1.字典(dict) 一.字典是容器类型(序列 ),以键值对作为元素.字典里面存的数据全是以键值对的形式出现的 b/键值对----> 键:值(key:value) dict1 = {'key1' ...
- python set集合_Python字典(dict)和集合(set)
想必大家都有查字典的经历吧,让我们再回顾一下查字典的步骤:根据拼音或者边旁找到这个字,然后翻到这个字对应的页数,就能看到这个字的详细解释啦. Python字典(dict)其实也是差不多的概念,在字典( ...
- Python 的内置数据类型:列表 list、元组 tuple、字典 dict、集合 set.
Python数据类型:list list 是一种有序集合,由于Python是动态语言,所以 list 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 list 中包含各种数据. 访问列表中 ...
最新文章
- 如何啃下C++这块复杂又难学的硬骨头?
- AAAI 2022接收论文列表发布,1349篇论文都在这了!
- CNN+Transformer=SOTA!CNN丢掉的全局信息,Transformer来补
- 空间简史-人类认识空间的旅程与其对强化学习的启示
- Java之HashMap源码解析1
- 010_Raphael事件
- 4路组相连cache设计_移动图形处理器的纹理Cache设计
- 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
- 你知道 Sql 中 left join 的底层原理吗?
- YUV / RGB 格式及快速转换算法
- JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足
- oracle 11g rac 环境(1)
- ASP.NET MVC:自定义 Route 生成小写 Url(转)
- 雪景特效制作软件JixiPix Snow Daze for Mac
- 利用python实现词频统计
- MFC CImageList序列图的用法
- 计算机用的代码怎么写,什么是代码,代码怎么写,怎么样写入电脑
- Ubuntu下载压缩文件
- 怎样区分线性和非线性_线性与非线性的区别(线性分析、线性模型)
- NPDP产品经理小知识-质量功能展开和质量屋
热门文章
- H3C DHCP中继实验
- C++ select模型聊天室初版
- 基于node.js的express使用数据库时,解决异步调用的问题
- Security+认证学习/备考经验
- iStack详解(三)——iStack多主检测方式
- Linux之LVM(逻辑卷管理)、分层存储Stratis、VDO、SWAP分区及相应案例
- 如何使用Secure CRT连接到华三模拟器上和华为模拟器上(更新模拟器版本,SecureCRT版本)
- linux命令行界面如何安装图形化界面
- find 命令详解 基于文件大小,名字和权限等的查找策略以及-path和-prune的详细解释
- vue-cli 脚手架开发环境搭建