回顾

int/float/str/list/tuple/dict

整数型和浮点型是不可变的,不是序列

字符串是不可变的,是序列

列表是可变的,是序列

元组是不可变的,是序列

字典是可变得,但不是序列

集合的基本概念

集合是基本的数学概念,它是集合论的研究对象,指具有某种特定性质的事物的总体,(在最原始的集合论─朴素集合论─中的定义,集合就是“一堆东西”。)集合里的事物(“东西”),叫作元素。若然 x 是集合 A 的元素,记作 x ∈ A。

创建集合的方法

方法1:使用花括号{} ;用花括号所包裹的对象,就是一个集合

方法2:set()函数 一般使用这个函数创建集合

集合的元素没有顺序,不可重复

集合是不可哈希的

 >>> {1,"python"} #使用花括号创建集合
set(['python', 1])
>>> type({1,"python"})
<type 'set'>
>>> set("python")
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> s= set("python") #使用set()创建集合
>>> s
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> s2=set(["baidu","google","ali"])
>>> type(s2)
<type 'set'>
>>> s2
set(['baidu', 'google', 'ali']) #集合的元素没有顺序
>>> s3=set([2,2,2,2,2])
>>> s3 #集合元素不可重复
set([2])
>>>

可哈希与不可哈希

就是在其生存期内,不可变的对象,是可哈希的,反之,可变的就是不可哈希的

Python中所有不可变的都是可哈希的,如数字、字符串、元组

另列表、字典都是可变的,都是不可哈希的

在字典中的Key键必须是可哈希的,即不可变的对象

在集合中,集合的元素必须是可哈希的,也就是说集合的元素必须是不可变对象

所以说用列表作为集合的元素,就报错,因为列表是不可哈希的对象

 >>> lst =[[1,2,3],"python"]   #用列表作为参数,创建一个集合,报错list 是不可hash的
>>> s =set(lst)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> d={[1,2,3]:"python"} #创建一个字典,key为列表,报错list 是不可hash的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list' #list 是不可哈希的
>>>

集合与列表之间的转换

 set() list()

 >>> lst=[1,2,3]
>>> s =set(lst) #将列表转换成集合
>>> s
set([1, 2, 3])
>>> lst2 =list(s) #将集合转换为列表
>>> lst2
[1, 2, 3]
>>> a =[1,2,2,3,3,6,6,8,9,0,0] #去除列表中的重复项,可使用set()集合
>>> s =set(a)
>>> s
set([0, 1, 2, 3, 6, 8, 9])
>>> a =list(s) #去除重复后,再转换为列表list
>>> a
[0, 1, 2, 3, 6, 8, 9]
>>> s
set([0, 1, 2, 3, 6, 8, 9])
>>> hash(s) #返回hash值,也可判断是否可哈希,报错不可哈希,否则返回hash值
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> hash(1)
1

创建不可变集合

frozenset() 创建不可变集合,是可哈希的

 >>> a
[0,1,2,3,6,8,9]
>>> s2 =frozenset(a)
>>> type(s2)
<type 'frozenset'>
>>> hash(s2)
2096340863
>>>

最新文章

  1. Chrome开发者工具不完全指南(五、移动篇)
  2. Ubuntu下的MySQL安装
  3. 字符输出流Writer简要概括
  4. mvn filter autoconfig 产生自动配置
  5. OS版本调研
  6. 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异
  7. 三维扫描 FZU 1063
  8. 通过spring 中的@Scheduled来执行定时任务
  9. 【JAVAWEB学习笔记】13_servlet
  10. 记一次改造react脚手架的过程
  11. [bzoj1273] [BeiJingWc2008]序列
  12. java 解析富文本处理 img 标签
  13. Android GUI之View绘制流程
  14. Java多线程并发最佳实践
  15. Rpgmakermv(30) GameQuest任务插件
  16. Cannot find snapshot in models/VGGNet/VOC0712/SSD_300x300
  17. android 控件各种颜色的半透明效果配置
  18. JAVA中使用HTTP 1.1提高基于AXIS 1.4的web service的性能
  19. Shiro系列(2) - 权限模型以及权限分配的两种方式
  20. Java SWT编程基础

热门文章

  1. JavaScript中callee,caller,argument的理解
  2. Postman安装及入门实践(以百度搜索为例)
  3. vim使用方法----转载
  4. .NET开源工作流RoadFlow-Bug修改-1.8.2子流程接收者始终为发送者
  5. JAVA的静态方法,静态变量,静态类。
  6. MySQL数据库备份与还原
  7. Android学习——BroadCast(一)
  8. 在 IDEA 中 配置 Maven
  9. myEclipse mybatis自动生成工具xml配置
  10. 使用 Sinamics S120 驱动脚本配置扩展报文