查找场景下与列表的性能对比

  字典与集合之所以高效的原因是:内部结构都是一张哈希表。

  平均情况下插入、查找和删除的时间复杂度为 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基础

  1. 集合不支持索引操作
  2. 判断元素是否在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)相关推荐

  1. python集合set底层原理_Python进阶11_字典dict和集合set的秘密

    本节你将看到关于字典dict和集合set更加深入的原理,尤其是关于散列在其中的作用,将回答以下问题:Python 里的 dict 和 set 的效率有多高? 为什么它们是无序的? 为什么并不是所有的 ...

  2. Python基础数据类型之set集合

    Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...

  3. python基础—字典

    阅读文本需要3分钟,不建议跳读 节目清单 字典是python中最重要的数据类型,字典由"键-值"对组成的集合,字典中的"值"通过"键"来引用 ...

  4. Python基础(06)——集合(set、frozenset)

    Python基础(06)--集合(set.frozenset) 集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示. 1.set的定义 创建集合:集合种的集合项可以是不同数据 ...

  5. Python 将字典(dict)转换为DataFrame

    Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典 ...

  6. Python遍历字典dict的几种方法(包含两个字典的遍历)

    Python遍历字典dict的几种方法 单个字典的遍历 根据key遍历 示例: dict_map = {1:'hello', 2:'world'} for key in dict_map:print( ...

  7. 【Python基础】字典dict和集合set

    今天看了一些python的字典和集合的文章,发觉底层有些东西自己不是很清楚,关于哈希和内存,网上搜了很多发现都是零星的说明,包括csdn里面都是很多杂乱的记录.通过自己搜集点东西把基础用法和实现原理都 ...

  8. 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...

    1.字典(dict) 一.字典是容器类型(序列 ),以键值对作为元素.字典里面存的数据全是以键值对的形式出现的 b/键值对----> 键:值(key:value) dict1 = {'key1' ...

  9. python set集合_Python字典(dict)和集合(set)

    想必大家都有查字典的经历吧,让我们再回顾一下查字典的步骤:根据拼音或者边旁找到这个字,然后翻到这个字对应的页数,就能看到这个字的详细解释啦. Python字典(dict)其实也是差不多的概念,在字典( ...

  10. Python 的内置数据类型:列表 list、元组 tuple、字典 dict、集合 set.

    Python数据类型:list list 是一种有序集合,由于Python是动态语言,所以 list 中包含的元素并不要求都必须是同一种数据类型,我们完全可以在 list 中包含各种数据. 访问列表中 ...

最新文章

  1. 如何啃下C++这块复杂又难学的硬骨头?
  2. AAAI 2022接收论文列表发布,1349篇论文都在这了!
  3. CNN+Transformer=SOTA!CNN丢掉的全局信息,Transformer来补
  4. 空间简史-人类认识空间的旅程与其对强化学习的启示
  5. Java之HashMap源码解析1
  6. 010_Raphael事件
  7. 4路组相连cache设计_移动图形处理器的纹理Cache设计
  8. 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
  9. 你知道 Sql 中 left join 的底层原理吗?
  10. YUV / RGB 格式及快速转换算法
  11. JavaScript学习(四十二)—利用工厂模式创建对象以及工厂模式创建对象的不足
  12. oracle 11g rac 环境(1)
  13. ASP.NET MVC:自定义 Route 生成小写 Url(转)
  14. 雪景特效制作软件JixiPix Snow Daze for Mac
  15. 利用python实现词频统计
  16. MFC CImageList序列图的用法
  17. 计算机用的代码怎么写,什么是代码,代码怎么写,怎么样写入电脑
  18. Ubuntu下载压缩文件
  19. 怎样区分线性和非线性_线性与非线性的区别(线性分析、线性模型)
  20. NPDP产品经理小知识-质量功能展开和质量屋

热门文章

  1. H3C DHCP中继实验
  2. C++ select模型聊天室初版
  3. 基于node.js的express使用数据库时,解决异步调用的问题
  4. Security+认证学习/备考经验
  5. iStack详解(三)——iStack多主检测方式
  6. Linux之LVM(逻辑卷管理)、分层存储Stratis、VDO、SWAP分区及相应案例
  7. 如何使用Secure CRT连接到华三模拟器上和华为模拟器上(更新模拟器版本,SecureCRT版本)
  8. linux命令行界面如何安装图形化界面
  9. find 命令详解 基于文件大小,名字和权限等的查找策略以及-path和-prune的详细解释
  10. vue-cli 脚手架开发环境搭建