Py西游攻关之基础数据类型 - Yuan先生

https://www.cnblogs.com/yuanchenqi/articles/5782764.html


八 集合(set)

集合是一个无序的,不重复的数据组合,它的主要作用如下:

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

集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。

集合元素(set elements):组成集合的成员(不可重复)

li=[1,2,'a','b']
s =set(li)
print(s) # {1, 2, 'a', 'b'} li2=[1,2,1,'a','a']
s=set(li2)
print(s) #{1, 2, 'a'}

集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键

li=[[1,2],'a','b']
s =set(li) #TypeError: unhashable type: 'list'
print(s)

集合分类:可变集合、不可变集合

可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素

不可变集合(frozenset):与上面恰恰相反

li=[1,'a','b']
s =set(li)
dic={s:'123'} #TypeError: unhashable type: 'set'

集合的相关操作  

1、创建集合

由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建

s1 = set('alvin')

s2= frozenset('yuan')

print(s1,type(s1))  #{'l', 'v', 'i', 'a', 'n'} <class 'set'>
print(s2,type(s2)) #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>

2、访问集合

由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。

s1 = set('alvin')
print('a' in s1)
print('b' in s1)
#s1[1] #TypeError: 'set' object does not support indexing for i in s1:
print(i)
#
# True
# False
# v
# n
# l
# i
# a

3、更新集合

可使用以下内建方法来更新:

s.add()
s.update()
s.remove()

注意只有可变集合才能更新:

# s1 = frozenset('alvin')
# s1.add(0) #AttributeError: 'frozenset' object has no attribute 'add' s2=set('alvin')
s2.add('mm')
print(s2) #{'mm', 'l', 'n', 'a', 'i', 'v'} s2.update('HO')#添加多个元素
print(s2) #{'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'} s2.remove('l')
print(s2) #{'mm', 'n', 'a', 'i', 'H', 'O', 'v'}

del:删除集合本身 

四、集合类型操作符 

1   in ,not in
2   集合等价与不等价(==, !=)
3   子集、超集

s=set('alvinyuan')
s1=set('alvin')
print('v' in s)
print(s1<s)

      4   联合(|)

联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()

s1=set('alvin')
s2=set('yuan')
s3=s1|s2
print(s3) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'} 

5、交集(&)

与集合and等价,交集符号的等价方法是intersection()

s1=set('alvin')
s2=set('yuan')
s3=s1&s2
print(s3) #{'n', 'a'} print(s1.intersection(s2)) #{'n', 'a'}

  6、查集(-)
      等价方法是difference()

s1=set('alvin')
s2=set('yuan')
s3=s1-s2
print(s3) #{'v', 'i', 'l'} print(s1.difference(s2)) #{'v', 'i', 'l'} 

7、对称差集(^)

对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()

s1=set('alvin')
s2=set('yuan')
s3=s1^s2
print(s3) #{'l', 'v', 'y', 'u', 'i'} print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}

  应用

'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis)) #[1, 2, 3, 4]

Py西游攻关之基础数据类型(五)-集合的更多相关文章

  1. Py西游攻关之基础数据类型(二)-列表

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html  五 List(列表) OK,现在我们知 ...

  2. Py西游攻关之基础数据类型(六)-文件操作

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 九 文件操作 9.1 对文件操作流程 打 ...

  3. Py西游攻关之基础数据类型(四)-字典

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 七 Dictionary(字典) 字典是 ...

  4. Py西游攻关之基础数据类型(三)-元组

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 六 tuple(元组) 元组被称为只读列 ...

  5. Py西游攻关之基础数据类型(一)-数字字符串字节布尔

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 数据类型 计算机顾名思义就是可以做数学计 ...

  6. Py西游攻关之Socket网络编程

    新闻 管理   Py西游攻关之Socket网络编程   知识预览 计算机网络 回到顶部 网络通信要素: A:IP地址   (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机 ...

  7. Py西游攻关之RabbitMQ、Memcache、Redis

    Py西游攻关之RabbitMQ.Memcache.Redis   RabbitMQ 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议 ...

  8. 转载博文: Py西游攻关之IO model

    Py西游攻关之IO model 转载:https://www.cnblogs.com/yuanchenqi/articles/5722574.html 事件驱动模型 上节的问题: 协程:遇到IO操作就 ...

  9. py西游公关之模块

    Py西游攻关之模块   模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可 ...

随机推荐

  1. 关于this和base的区别

    一句话总结:在有冲突得时候,base和this能够进行区分,在没有冲突得时候,是一样得. 基于成员调用 基于构造方法 参考: http://www.cnblogs.com/reommmm/archiv ...

  2. JS中的 '+' 号

    当用作单目操作符的时候,+操作符不会对Number类型产生影响.但如果应用在字符串类型上,会将其转换为数字: var a = 25;a =+ a; //对a值没有影响console.log(a); / ...

  3. linux contab

    定义格式: * * * * * commandm(0-59), h(0-23) d(1-31) M(1-12) W(0-7)周W用1-6表示分别对应:每周一….五,六,周日在国外老外周日相当于第一个工 ...

  4. Linux - 终端terminal进入交互环境的快捷键

    1. 上一页 ctrl + b 2. 下一页 空格 / ctrl + f 3. 上半页 ctrl + u 4. 下半页 ctrl + d 5. 上一行 k 6. 下一行 j 7. 向上查找 ?key ...

  5. Stream:java1.8新特性

    原 Stream:java1.8新特性 2017年08月01日 18:15:43 kekeair-zhang 阅读数:392 标签: streamjava1-8新特性 更多 个人分类: 日记 版权声明 ...

  6. 【渗透测试】Squirrelmail远程代码执行漏洞+修复方案

    最近网上有点不太平,爆出各种漏洞,等下会把近期的漏洞复现一下,发出来.安全圈的前辈总是默默的奉献,在这里晚辈们只能站在巨人的肩膀上,跟紧前辈们的步伐,走下去. -------------------- ...

  7. Java的进制转换

    十进制转其它进制 其它进制转十进制 A进制转B进制可以将十进制作为中间媒介 Integer.toString(int i, int radix) 返回用第二个参数指定基数表示的第一个参数的字符串表示形 ...

  8. RestTemplate HttpMessageConverter报错的解决方案no suitable HttpMessageConverter

    错误 no suitable HttpMessageConverter found for response type and content type [text/html;charset=UTF- ...

  9. centos7.4安装gitlab

    1. 安装依赖软件 yum -y install policycoreutils openssh-server openssh-clients postfix 2.下载gitlab安装包,然后安装 c ...

  10. Python爬虫解析网页的4种方式 值得收藏

    用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. ​ 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存 ...