1.集合是一个无序的,且不重复元素的集合。它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

2.基本功能包括关系测试和消除重复元素。注意:集合存在的意义就是去重和关系运算。

  • 去重,把一个列表变成集合,就自动去重了。
  • 关系测试,测试两组数据之前的交集、差集、并集等关系。

3.集合中的三个特征

  • 确定性(元素必须是可hash)
  • 互异性(去重)
  • 无序性(集合中的元素没有先后之分)如集合{1,2,3}和集合{2,3,1}算作一个集合

集合的创建

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。大括号也不可以创建元素含有字典与列表的集合。

创建set需要一个list或者tuple或者dict作为输入集合。其中重复元素在set中会自动过滤。

集合可以通过可迭代对象(字符串、元组、列表等)进行创建;集合中的元素不可重复;集合中的元素无序排列。

创建空的集合:s = set(),不能用 { } 来创建空集合。

创建非空集合:s = {1,2,3,4},或者 s = set(iterable)。

# 创建空集合
set1 = set()
print(set1, type(set1)) # (set([]), <type 'set'>) # 创建非空集合
set1 = {1, 2, 2}
print(set1, type(set1)) # (set([1, 2]), <type 'set'>)
set2 = set({1, 2, 2})
print(set2, type(set2)) # (set([1, 2]), <type 'set'>)
set3 = set('abcdefabcd')
set4 = set(['a','b','c','a'])
set5 = set(('a','b','c','a'))
set6 = set({'a':1, 'b':2})
set7 = set(range(1, 10, 3))
print(set3, type(set3)) # (set(['a', 'c', 'b', 'e', 'd', 'f']), <type 'set'>)
print(set4, type(set4)) # (set(['a', 'c', 'b']), <type 'set'>)
print(set5, type(set5)) # (set(['a', 'c', 'b']), <type 'set'>)
print(set6, type(set6)) # (set(['a', 'b']), <type 'set'>)
print(set7, type(set7)) # (set([1, 4, 7]), <type 'set'>) # 集合推导式
set1 = {x for x in 'abracdabra' if x not in 'abc'}
print(set1, type(set1)) # (set(['r', 'd']), <type 'set'>)

集合的常用方法:见help(set)

添加元素

set1 = {'1', '2'}
set2 = {'1', '2'}
set3 = {'1', '2'} set1.add('3') # add的作用相当于列表中的append方法,但是添加新元素时,如果存在就不添加。
print set1 # set(['1', '3', '2']) set2.update('2345') # update 类似于列表中的extend方法,update方法可以支持同时传入多个参数
print set2 # set(['1', '3', '2', '5', '4']) set3.update(['6', '8'], 'de') # 添加列表到集合,列表元素会被分解为单个元素后添加到集合
print set3 # set(['e', 'd', '1', '2', '6', '8'])

删除元素

s1 = set(['Python','Java','C','C++','C#'])
s2 = set(['Python','Java','C','C++','C#'])
s3 = set(['Python','Java','C','C++','C#']) s1.remove('C++') # 使用remove(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,则会抛出异常。
s2.discard('C++') # 使用discard(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,不会抛出异常。
print s1 # set(['Python', 'C#', 'C', 'Java'])
print s2 # set(['Python', 'C#', 'C', 'Java']) print s3.pop() # Python 随机删除一个元素。由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误。
print s3 # set(['C#', 'C', 'Java', 'C++']) s3.clear() # 清空集合
print s3 # set([])
del s3 # 删除整个集合:del set
print s3 # NameError: name 's3' is not defined

查找元素

s1 = set(['Python','Java','C','C++','C#'])
for i in s1:
print i

集合的运算

交集、并集、补集、差集、子集、超集

in /not in运算符:in等同于字典的in,用于集合中,当某个值存在于集合中,返回True,否则返回False。not in 与in 返回值相反。集合的in / not in 运算符的速度快于序列。

s1 = {1, 2, 3}
s2 = {3, 4, 5} # 交集 & 或者 intersection()
print s1 & s2 # {3}
print s1.intersection(s2) # 并集 | 或者 union()
print s1 | s2 # {1, 2, 3, 4, 5}
print s1.union(s2) # 补集(反交集) ^ 或者 symmetric_difference()
print s1 ^ s2 # {1, 2, 4, 5}
print s1.symmetric_difference(s2) # 差集 - 或者 difference()
print s1 - s2 # {1, 2}
print s1.difference(s2) # 超集>:判断一个集合是另一个集合的超集,使用 >= 也可以
print {1,2,3} > {1,2} # True {1,2,3} 是 {1,2} 的超集
print {1,2,3}.issuperset({1,2}) # 子集<:判断一个集合是另一个集合的子集,使用 <= 也可以
print {1,2} < {1,2,3} # True {1,2} 是 {1,2,3} 的子集
print {1,2}.issubset({1,2,3}) print {1,2,3} == {3,2,1} # True
print {1,2,3} != {3,2,1} # False print 1 in {1,2,3} # True
print 1 not in {1,2,3} # False

集合的函数

len(x)  max(x)  min(x)  sum(x)  any(x)  all(x)

s1 = {1, 2, 3, 6}
print len(s1) # 4
print max(s1) # 6
print min(s1) # 1
print sum(s1) # 12
print any(s1) # True
print all(s1) # True

补充:集合数据类型可以去重

arry = [1, 2, 3, 4, 6, 3, 8, 2]

set1 = set(arry)
print set1 # {1, 2, 3, 4, 6, 8}
arry = list(set1)
print arry # [1, 2, 3, 4, 6, 8]

  

最新文章

  1. iOS上架90034问题解决
  2. C语言中scanf()的用法!
  3. 在Delphi中如何动态创建dbf数据库(一)?
  4. jquery mouseout事件错误(bug)
  5. iOS 之点击按钮改变状态的图片
  6. 再谈IE的浏览器模式和文档模式
  7. linux培训笔记1
  8. 纯CSS制作网页图标
  9. 老男孩Python全栈学习 S9 日常作业 003
  10. mongo固定集合
  11. HDU 1027(数字排列 STL)
  12. 一种基于NTC的控温电路及软件实现
  13. encodeURIComponent编码时为什么要编码两次
  14. js正则表达式中的正向肯定预查和正向否定预查
  15. win8 IIS配置
  16. python装饰器原理
  17. InfiniBand 与Intel Omni-Path Architecture
  18. Linux 内核版本号查看
  19. ogg使用语句
  20. MAC安装go

热门文章

  1. The Preliminary Contest for ICPC Asia Shenyang 2019 C Dawn-K's water (完全背包)
  2. MAC平台基于Python的Appium环境搭建
  3. Android学习04
  4. 洛谷 P1563 玩具谜题(模拟)
  5. python中,字符串前的u,b,r字符的含义
  6. 「JSOI2015」送礼物
  7. 【代码审计】VAuditDemo 后台登录功能验证码绕过
  8. PyQt5单元格操作大全
  9. Flexconnect部署
  10. java中对于多态的一个实例分析