python创建一个空集合_Python 极简教程(十)集合 set

什么是集合?

集合(set)是一种可变,无序和不重复的序列。

集合是python的序列之一,集合没有列表(list)、元组(tuple)和字典(ditc)常见。但是有时候也有奇效。

我们先来看个集合的例子:

>>> s = {'b', 'x', 'a'}

>>> type(s)

#

s = {'b', 'x', 'a'}就是一个集合(set),数据类型就是set。

我们可以仔细观察一下集合(set)的形态:

以逗号分隔元素,类似列表(list)和元组(tuple);

以大括号{}进行约束并且其无序的特性,类似字典(dict);

无序的特性,类似字典(dict);

不重复,类似字典中的键。

可以简单的理解为就是没有值(value)的字典(dict)。

当然这是我说的,不够准确,被人骂了不要来找我!

接下来我们来看下集合的基本操作。

集合的创建

我们看如何创建集合:

创建一个空的集合;

空集合的创建不能用以下这种形式

>>> s = {} # 这是一个空字典,不是空集合

>>> type(s)

#

那要如何创建一个空的集合呢?

>>> s = set() # 这是一个空字典,不是空集合

>>> s

# set()

>>> type(s)

#

我们可以看到要创建一个空集合,要使用s = set()这种方式。

创建非空的集合;

set()可以将任意一种序列变成集合

# 列表

>>> li = ['a', 'b', 'c']

>>> set(li)

# {'b', 'c', 'a'}

# 元组

>>> t = (1,2,3)

>>> set(t)

# {1, 2, 3}

# 字典

>>> d = {'x':1,'y':2}

>>> set(d)

# {'y', 'x'}

# 字符串

>>> set('python')

# {'y', 'p', 'n', 'h', 't', 'o'}

利用集合的不重复状态,进行序列的去重

# 有重复元素的列表

>>> li = ['a', 'b', 'c', 'a', 'c']

>>> s = set(li)

# {'b', 'c', 'a'}

# 如果想去重后依然是列表,转换一下

>>> li = list(set(li))

>>> li.sort()

>>> li

# ['a', 'b', 'c']

集合元素的添加、删除

集合元素的添加有两种常用方法,分别是add和update

add方法类似于列表(list)中的append方法,在末尾添加元素

>>> s = {'b', 'c', 'a'}

>>> s.add('abc') #这里会把'abc'当成一个字符串

>>> s

# {'b', 'c', 'abc', 'a'}

集合中的元素不能是列表(list)、字典(dict)

>>>s = {'b', 'c', 'a'}

>>> s.add([1,2])

TypeError: unhashable type: 'list'

>>> s.add({'x':1,'y':2})

TypeError: unhashable type: 'dict'

update方法类似于列表相加,其中update的参数为序列。也就是把序列中的所有元素全部无序并排重后加入到集合中。

>>> s = {'b', 'c', 'a'}

>>> s.update('xyz') #这里会把'xyz'当成序列来处理,'x','y','z'分别是三个元素

>>> s

# {'y', 'c', 'z', 'b', 'x', 'a'}

集合元素的删除方法

集合删除操作方法有两种:

s.remove('e'):删除匹配的元素

s.pop():删除第一个元素,无法指定index,因为集合没有index

# remove

>>> s = {'b', 'c', 'a'}

>>> s.remove('a')

>>> s

# {'b', 'c'}

# pop

>>> s = {'b', 'c', 'a'}

>>> s.pop()

# 'b'

>>> s

# {'c', 'a'}

集合的交集、合集(并集)、差集

通过集合的交集、合集(并集)、差集可以很方便的处理一些列表(list)

交集:

交集,符号“&”,表示两个集合中相同的元素部分组成新的集合

# 交集 &

>>> a = set(['a', 'b', 'c'])

>>> b = set(['b','d','e'])

>>> a & b

# {'b'}

合集(并集)

合集(并集),符号“|”,表示两个集合组合成一个不重复的新集合(也就是重复部分会进行排重)

# 合集(并集) |

>>> a = set(['a', 'b', 'c'])

>>> b = set(['b','d','e'])

>>> a | b

# {'e', 'd', 'c', 'b', 'a'}

差集、相对补集

差集、相对补集, 符号“-”,如果 a - b 表示a集合中没有在b集合中存在的元素,反之 b - a 表示b集合中没有在a集合中存在的元素。可以用于取两个集合中不相同的元素。

# 合集(并集) |

>>> a = set(['a', 'b', 'c'])

>>> b = set(['b','d','e'])

>>> a - b

# {'c', 'a'}

>>> b - a

# {'e', 'd'}

其他

除开上面集中集合外,还有类似与列表(list)中的一些操作,如in,not in,!=,==等

# 不等于 !=

>>> a != b

# True

# 等于 ==

>>> a == b

# False

# 包含 in

>>> a in b

# False

# 不包含 not in

>>> a not in b

# True

通过集合,我们可以方便快速的处理各种序列中的一些特殊操作。

排重,如果序列中存在重合的元素,可以通过集合方便的去重;

取两个序列中相同的元素,通过将序列转换为集合后,取交集即可;

将两个序列合并,并且元素不重复,通过合集即可;

取两个序列中不相同的部分,用差集即可。

本节练习:

将列表 [5, 6, 7, 4, 5, 7] 中重复的元素去掉

求列表[2, 3, 5, 7, 9]和[2, 4, 5, 9, 8] 中的相同元素和不同元素

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值