专栏首页python3python中的集合

python中的集合

一、目录

1、集合概述

2、关于集合的操作符、关系符号

3、集合的一系列操作(添加、更新、访问、删除)

4、关于集合的内建函数、内建方法

5、小结

二、集合概述

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

集合元素(set elements):组成集合的成员

1 >>> li=['a','b','c','a']2 >>> se =set(li)3 >>> se4 set(['a', 'c', 'b'])

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

>>> li=[['a','b','c'],['a','c']]>>> se = set(li)Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    se = set(li)
TypeError: list objects are unhashable

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

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

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

集合操作符与关系符号:(忘完了!)

三、集合的相关操作

1、创建集合

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

>>> s = set('beginman')>>> s
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])>>> t = frozenset('pythonman')>>> t
frozenset(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])>>> type(s),type(t)
(<type 'set'>, <type 'frozenset'>)>>> len(s),len(t)
(7, 8)>>> s==t
False>>> s=t>>> s==t
True>>>

2、访问集合

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

>>> 'a' in s
True>>> 'z' in s
False>>> for i in s:    print i

    
a
h
m
o
n
p
t
y>>>

3、更新集合

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

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

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

>>> s.add(0)Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    s.add(0)AttributeError: 'frozenset' object has no attribute 'add'>>> type(s)<type 'frozenset'>
>>> se = set(s)>>> se
set(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])>>> type(se)<type 'set'>
>>> se.add(0)>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 't', 'y'])>>> se.update('MM')>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 'M', 't', 'y'])>>> se.update('Django')>>> se
set(['a', 0, 'D', 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])>>> se.remove('D')>>> se
set(['a', 0, 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])>>>

del:删除集合本身

 四、集合类型操作符

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

>>> set('shop')<set('cheeshop')
True>>> set('bookshop')>=set('shop')
True

4、联合(|)

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

>>> s1=set('begin')>>> s2=set('man')>>> s3=s1|s2>>> s3
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> s1.union(s2)
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])

但+ 运算则不适合:

>>> s3New = s1+s2Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    s3New = s1+s2
TypeError: unsupported operand type(s) for +: 'set' and 'set'

5、交集(&)

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

>>> s1&s2
set(['n'])>>> s1.intersection(s2)
set(['n'])

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

>>> s1-s2
set(['i', 'b', 'e', 'g'])>>> s1.difference(s2)
set(['i', 'b', 'e', 'g'])

7、对称差分(^)

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

>>> s1^s2
set(['a', 'b', 'e', 'g', 'i', 'm'])>>> s1.symmetric_difference(s2)
set(['a', 'b', 'e', 'g', 'i', 'm'])

注意:集合之间and,or

>>> s1 and s2
set(['a', 'm', 'n'])   #取 s2>>> s1 or s2
set(['i', 'b', 'e', 'g', 'n']) #取 s1>>>

五、集合、列表、元组、字符串之间转换

>>> list(s1)
['i', 'b', 'e', 'g', 'n']>>> str(s1)"set(['i', 'b', 'e', 'g', 'n'])">>> tuple(s1)
('i', 'b', 'e', 'g', 'n')

应用:

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

六、关于集合的内建函数、内建方法

1、len():返回集合元素个数

2、set()、frozenset()工厂函数

3、所有集合方法:

4、仅适合可变集合

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python(四)

          在python里面  set是基本数据类型的一种集合的类型,他有可变的集合(set())和不可变的(frozenset)两种,包括集合set,集合s...

    py3study
  • python3 集合

    py3study
  • Python 元组和集合的特点及常用操作

    思考:元组不能改变,那为什么有列表,还要有元组呢?元组一般当成参数传递给方法,而不是传递列表,元组不可变的好处,保证数据的安全,比如我们传给一个不熟悉的方法或者...

    py3study
  • 设计模式第五讲-适配器模式

    存在两种适配器: “对象适配器” 和 “类”适配器 (因为大部分语言不支持多重继承,所以此处指的是对象适配器)

    用户2825413
  • 腾讯云CDN开启中间源导致wordpress后台无法访问的最终解决办法

    魏艾斯博客使用了腾讯云CDN之后,全国各地打开速度都极快。曾经老魏遇到腾讯云CDN开启中间源导致网站后台打不开的情况,因为网上遇到这种情况的比较少(主要是没人像...

    魏艾斯博客www.vpsss.net
  • 极客周刊丨AcFun将复活,BTC价格将触底反弹,快播CEO王欣的未来...

    一川水巷
  • 抽象类及接口详解

      1、接口是多继承,抽象类是单继承(一个类仅能继承一个抽象类,但可以继承多个接口)

    小世界的野孩子
  • java学习笔记(基础篇)—==与equals的区别

    ​ 用于基本数据类型相互比较. 比较二者的值是否相等 ​ 用于引用数据类型相互比较. 比较二者地址是否相等 ​ 不能用于基本数据类型与引用型比较

    chlinlearn
  • 张小龙现场“约战”跳一跳,发布2018微信全新计划(内附演讲全文)

    用户1756920
  • java_面试_01_一个月的面试总结(java)

           JVM内存管理机制和垃圾回收机制(基本每次面试都会问,一定要搞得透彻)

    shirayner

扫码关注云+社区

领取腾讯云代金券