资讯专栏INFORMATION COLUMN

Python基础之(四)之集合

CKJOKER / 960人阅读

摘要:并且集合中的元素也是随机排序的。除了用来创建集合,还可以使用的方式,但是这种方式不提倡使用,因为在某些情况下,搞不清楚是字典还是集合。集合不是序列类型,不能用索引方式对其进行修改和实现集合和列表两种对象之间的转化。

集合Set类似字典的特点,可以用{}花括号来定义;其中的元素是没有序列,也就是非序列类型的数据;而且集合中的元素不可重复,这就类似于dict键。

创建集合
>>> s1 = set("qiswri") #有两个i
>>> s1
set(["q", "i", "s", "r", "w"]) #只有一个i
>>> 
>>> s2 = set([123,"google","facebook","book","facebook"]);
>>> s2
set(["facebook", 123, "google", "book"]) #只有一个facebook

说明集合中的元素是不能重复的,在创建集合的时候,如果发现了重复的元素,就会自定过滤重复的元素。并且集合中的元素也是随机排序的。

除了用set()来创建集合,还可以使用{}的方式,但是这种方式不提倡使用,因为在某些情况下,Python搞不清楚是字典还是集合。

unhashtable(不可哈希的)表示可变数据,如列表和字典都能原地修改,就是unhastable的;
hastable(可哈希)表示不可变数据,如字符串不能修改。

>>> s1
set(["q", "i", "s", "r", "w"])
>>> s1[1] = "w"   #集合不是序列类型,不能用索引方式对其进行修改

Traceback (most recent call last):
  File "", line 1, in 
    s1[1] = "w"
TypeError: "set" object does not support item assignment

list()和set()实现集合和列表两种对象之间的转化。

>>> s2
set(["facebook", 123, "google", "book"])
>>> type(s2)

>>> lst = list(s2)
>>> lst
["facebook", 123, "google", "book"]
>>> type(lst)

>>> s3 = set(lst)
>>> s3
set(["google", 123, "facebook", "book"])
集合的函数

dir(set):列出集合的函数

add和update

help(set.add)

>>> s1 = set(["a","b","c"])
>>> s1
set(["a", "c", "b"])
>>> s1.add("abc") #向集合中添加元素
>>> s1
set(["a", "c", "b", "abc"])

>>> s1.add([1,2,3]) #不能添加列表,因为列表的数据是可变的

Traceback (most recent call last):
  File "", line 1, in 
    s1.add([1,2,3])
TypeError: unhashable type: "list"
>>> 
>>> s1
set(["a", "c", "b", "abc"])
>>> s2 = set(["e","f","g"])
>>> s1.update(s2) #集合s2添加到s1中
>>> s1
set(["a", "c", "b", "e", "abc", "g", "f"])
>>> s2
set(["e", "g", "f"])
pop、remove、discard、clear
>>> s1
set(["a", "c", "b", "e", "abc", "g", "f"])
>>> s1.pop() #随机删除一个元素,并返回这个元素
"a"
>>> s1.pop()
"c"
>>> s1.pop("b")  #不能指定参数

Traceback (most recent call last):
  File "", line 1, in 
    s1.pop("b")
TypeError: pop() takes no arguments (1 given)
>>> 
>>> s1.remove("b") #删除集合中指定的元素
>>> s1
set(["e", "abc", "g", "f"])
>>> s1.remove()  #remove必须指定参数

Traceback (most recent call last):
  File "", line 1, in 
    s1.remove()
TypeError: remove() takes exactly one argument (0 given)
>>> s1.discard("g") #存在则删除集合中的元素
>>> s1
set(["e", "abc", "f"])
>>> s1.discard("i") #不存在则不做处理,不抛出异常
>>>
>>> s1.clear()  #清空集合
>>> s1
set([])
不变的集合
>>> f1 = frozenset("qwert")
>>> f1
frozenset(["q", "r", "e", "t", "w"])
>>> f1.add("q") #不能修改集合

Traceback (most recent call last):
  File "", line 1, in 
    f1.add("q")
AttributeError: "frozenset" object has no attribute "add"
>>> f1.remove("r")

Traceback (most recent call last):
  File "", line 1, in 
    f1.remove("r")
AttributeError: "frozenset" object has no attribute "remove"
>>> f1.pop()

Traceback (most recent call last):
  File "", line 1, in 
    f1.pop()
AttributeError: "frozenset" object has no attribute "pop"
集合元素 元素与集合的关系
>>> aset=set(["q","w","e","r","t"])
>>> aset
set(["q", "r", "e", "t", "w"])
>>> "q" in aset
True
>>> "a" in aset
False
集合与集合的关系 A是否等于B
>>> a
set(["q", "r", "e", "t", "w"])
>>> b = set(["a","b","c"])
>>> a == b
False
>>> a != b
True
A是否是B的子集
>>> c = set(["q","r"])
>>> a
set(["q", "r", "e", "t", "w"])
>>> 
>>> c.issubset(a) #判断c是否是a的子集
True
>>> a.issuperset(c) #判断a是否是c的超集
True
AB的并集
>>> a
set(["q", "r", "e", "t", "w"])
>>> b
set(["a", "c", "b"])
>>> a | b
set(["a", "c", "b", "e", "q", "r", "t", "w"]) #ab的并集
>>> a.union(b)
set(["a", "c", "b", "e", "q", "r", "t", "w"]) #ab的并集
AB的交集
>>> a
set(["q", "r", "e", "t", "w"])
>>> b
set(["a", "q", "c", "b"])
>>> a & b   #ab的交集
set(["q"])
>>> a.intersection(b)
set(["q"])
A相对B的差集

A相对B不同的部分元素集合

>>> a
set(["q", "r", "e", "t", "w"])
>>> b
set(["a", "q", "c", "b"])
>>> a - b
set(["r", "e", "t", "w"])
>>> a.difference(b)
set(["r", "e", "t", "w"])
AB的差集

AB中不同元素的集合

>>> a
set(["q", "r", "e", "t", "w"])
>>> b
set(["a", "q", "c", "b"])
>>> a.symmetric_difference(b)
set(["a", "c", "b", "e", "r", "t", "w"])

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38208.html

相关文章

  • Python基础接口——从协议到抽象基类

    摘要:本文重点协议是中非正式的接口了解抽象基类的基本概念以及标准库中的抽象基类掌握抽象基类的使用方法。三抽象基类的使用通过继承声明抽象基类声明抽象基类最简单的方式是继承或其他抽象基类注意在之间,继承抽象基类的语法是。 导语:本文章记录了本人在学习Python基础之面向对象篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、协议是Python中非正式的接...

    TwIStOy 评论0 收藏0
  • Python爬虫学习路线

    摘要:以下这些项目,你拿来学习学习练练手。当你每个步骤都能做到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,比如说。 (一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法...

    liaoyg8023 评论0 收藏0
  • Python基础知识集合

    摘要:和一样可以将元素从集合中删除,区别是如果元素不存在则不会报错。从集合中随机删除一个元素,并且返回该元素,如果集合为空则会报错用于清空集合。 集合的描述 集合是无序的、不重复的数据集合,它本身是可变的,但里面的元素是不可变类型(这里要注意,即使是含有列表的元组也不可以,必须是完全不可变类型) 创建集合 创建集合可以使用大括号{}来创建,元素间用逗号分隔,但是不能用它来创建空集合,因为{}...

    libxd 评论0 收藏0
  • 基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • 1024程序员节最新福利2018最全大数据资料集合

    摘要:前言有好久没有写博客了主要这段时间都沉迷学习无法自拔了哈哈自吹一波前两天不是节吗所以就有很多福利出现了当然每个人能都获得的信息都有所不同这就是所谓的信息差秉着好东西需要分享和开源的好习惯所以来给你们送福利了其他福利一程序员节最新福利之最全资 前言 有好久没有写博客了,主要这段时间都沉迷学习无法自拔了,哈哈.自吹一波. 前两天不是1024节吗,所以就有很多福利出现了,当然每个人能都获得的...

    RancherLabs 评论0 收藏0

发表评论

0条评论

CKJOKER

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<