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]

  

Python—数据类型之集合(Set)的更多相关文章

  1. 【转】Python数据类型之“集合(Sets)与映射(Mapping)”

    [转]Python数据类型之“集合(Sets)与映射(Mapping)” 一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的 ...

  2. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之集合类型(set)

    集合!Python中的集合数据基本上是为了方便数学计算使用的. 什么是集合? 集合就是“确定的一堆东西”.集合里面的东西叫做元素. 特点:1. 集合里面是没有重复的元素的.           2. ...

  3. 7、python数据类型之集合set

    数据类型之集合setset 不允许重复的无序集合,不能通过下标取值,因为无序1.创建   创建空集合   s ={} 默认类型为字典,所以不是空集合,空集合如下   s = set()   s = { ...

  4. python 数据类型之集合

    一.集合的定义: 定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key. 特性:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值 二 ...

  5. Python数据类型-8 集合set

    集合set set集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素.集合使用大括号({})框定元素,并以逗号进行分隔.但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ...

  6. Python数据类型之“集合(Sets)与映射(Mapping)”

    一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的重复.以及科学计算,例如交集.并集.差分和对称差分.通俗点来说,集合是一个 ...

  7. Python基础-python数据类型之集合(四)

    集合 集合是一个无序的,不重复的数据组合,基本功能包括关系测试和消除重复元素. 集合对象还支持 union,intersection,difference和 sysmmetric difference ...

  8. python 数据类型 之 集合

    集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合 集合的三个特性: 1.确定性 (element必须可hash,不可变类型是可hash的) 2.互异性(集合中element 不能重复) ...

  9. python数据类型之集合

    对python中集合的理解 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set ...

随机推荐

  1. Python--比较两个字典部分value是否相等(可以用于接口自动化)

    eg:例如你调用了一个新增的接口,以往功能测试的话,你再web端新增一个店铺之后,你肯定要去数据库中查看,这些数据插入的对不对,是否正确的插入了每个字段 # 比较两个字典部分是否相等 def comp ...

  2. PTA的Python练习题(十八)

    第4章-20 求矩阵各行元素之和 遇到一个麻烦的事情: 上面a,b输入,如果一起输入转int会报错,因为int只能一对一 但是明明我分开来int了,下面第十行还是报错说我的b是string字符,难不成 ...

  3. Git添加和克隆远程库

    首先我们得有一个GitHub账号,然后把当前电脑的SSH Key添加到GitHub上面 第1步:创建SSH Key.在用户主目录下(可用 “cd ~”进入用户主目录),看看有没有.ssh目录,如果有, ...

  4. 80端口被system占用

    # 开始 今天配置wampserver 3.0.6的时候 发现右下角的图标一直是红色的 经验告诉我两个服务都没有运行 # 解决思路 wampserver有两个服务 一个是 Apache 服务 一个是 ...

  5. 【Hibernate 检索策略】

    HibernateDemo2 public class HibernateDemo2 { //演示批量抓取 @Test public void testSelect3() { SessionFacto ...

  6. 安卓之线性布局LinearLayout

    一.xml属性   (1)orientation:指定线性布局的方向   (2)gravity:指定布局内部视图与本线性布局的对齐方式   (3)layout_weight:指定当前视图的宽或高占上级 ...

  7. TreeGrid分页树形表格

    先展示效果图: 加载treegrid的json数据格式有两种: (1)基本的数据结构 [{ , "name":"C", "size":&qu ...

  8. PyQt5四大布局方式

    1.绝对布局方式'''绝对布局方式,通过move的XY坐标方式来控制控件的位置'''from PyQt5.QtWidgets import *import sys,math class absolut ...

  9. DC-DC芯片

    KIS-3R33S:同步整流7V-24V转5V/3A DC-DC降压模块 稳压电源模块 效率超过LM2576

  10. 解决sublime不能安装packages的问题

    问题如下:该问题产生的原因是因为默认的配置中无法访问 "https://packagecontrol.io/channel_v3.json"该文件造成的 解决: 1.下载 chan ...