Python3 集合类型

译者:anxin
日期:2017-10-28

set(集合)类型是Python3的一种数据类型,集合(set)中包含的元素是无序的,无重复的序列。集合数据类型的主要作用是测试是否是集合成员中的一个,和消除重复元素。

集合(set)是可变数据类型,支持插入和删除元素,但是不支持索引和分片元素。

Python3 定义集合

1)Python3的集合使用花括号{}定义,然后在花括号中把各个元素使用逗号,分开。Python3 集合中包含的元素可以是不同的数据类型(如包括字符串和整数),但通常情况下我们创建的集合的元素都是同一种数据类型。

#定义集合中包含不同数据类型
>>> s1 = {'Python3', 123, 321}
>>> s1
{'Python3', 123, 321}

#集合的元素为相同数据类型,字符串
>>> s2 = {'Python2', 'Python3'}
>>> s2
{'Python2', 'Python3'}

#集合的元素为相同数据类型,整数
>>> s3 = {123, 321, 234, 432}
>>> s3
{123, 321, 234, 432}

2)定义集合时,如果包含相同的数据元素,那么将去除重复的元素

>>> s = {123, 321, 123, 321}
>>> s
{321, 123}

3)定义一个空集合,空集合使用set()函数定义,使用一对花括号{}定义的是一个字典(dictionary),

>>> st = set()

4)Python3 集合不支持嵌套定义。

Python3 测试元素是否存在

集合(set)的一个重要的功能就是测试集合中是否包含一个元素

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # fast membership testing
True

测试集合中不否包含特定的一个元素

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'crabgrass' not in basket            # fast membership testing
True

Python3 集合的添加删除操作

Python3 向集合中添加元素

Python3向集合中添加元素的语法如下

set.add(elem)

实例如下:

>>> i = {1, 2, 3, 4, 5}
>>> i.add(8)
>>> i
{1, 2, 3, 4, 5, 8}

Python3 删除集合中的一个元素

1)使用remove(elem)方法删除一个元素,如果元素不存在,则会抛出一个错误

set.remove(elem)

实例如下:

>>> i = {1, 2, 3, 4, 5}
>>> i.remove(5)
>>> i
{1, 2, 3, 4}
>>> i.remove(9)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 9

2)使用remove(elem)方法删除一个元素,如果元素不存在,则会抛出一个错误

set.discard(elem)

实例如下:

>>> i = {1, 2, 3, 4, 5}
>>> i.discard(5)
>>> i
{1, 2, 3, 4}
>>> i.discard(9)
>>> i
{1, 2, 3, 4}

3)删除集合中的任意一个元素,并返回元素的值

set.pop()

实例如下:

>>> i = {1, 2, 3, 4, 5}
>>> i.pop()
1

Python3 集合的交并差运算

假设三个集合i = {1, 2, 3, 4, 5},j = {4, 5, 6, 7, 8},k={4, 5}

操作符 说明 结果

set.intersection(*others)

#或者
set & other

集合的交运算,即求两个集合的交集(在两个集合中共同的元素) >>> i & j
{4, 5}
>>> i.intersection(j)
{4, 5}

set.union(*others)

#或者
set | other

集合的并运算,即求两个集合的并集(在两个集合中所有的元素) >>> i | j
{1, 2, 3, 4, 5, 6, 7, 8}
>>> i.union(j)
{1, 2, 3, 4, 5, 6, 7, 8}

set.difference(*others)

#或者
set - other

集合的差运算,即求两个集合的差集(第一个集合中去除与第二个集合中相同的元素) >>> i - j
{1, 2, 3}
>>> i.difference(j)
{1, 2, 3}

set.symmetric_difference(other)

#或者
set ^ other

集合的对称差运算,即两个集合的并集减去两个集合的交集 >>> i ^ j
{1, 2, 3, 6, 7, 8}
>>> i.symmetric_difference(j)
{1, 2, 3, 6, 7, 8}

set.issuperset(other)

#或者
set >= other

集合的超集运算,测试第一个集合是否是另一个集合的超集 >>> i >= k
True

set.issubset(other)

#或者
set <= other

集合的子集运算,测试第一个集合是否是另一个集合的子集 >>> i <= k
False

Python3 集合的赋值运算

假设三个集合i = {1, 2, 3, 4, 5},j = {4, 5, 6, 7, 8},k={4, 5}

操作符 说明 结果

set.intersection_update(*others)

#或者
set &= other

更新set集合,集合中只保留两个集合中共同的元素 >>> i &= j
>>> i
{4, 5}

set.update(*others)

#或者
set |= other

把第others集合中所有元素添加到set集合中 >>> i |= j
>>> i
{1, 2, 3, 4, 5, 6, 7, 8}

set.difference_update(*others)

#或者
set -= other

删除set集合中与others集合相同的元素 >>> i -= j
>>> i
{1, 2, 3}

set.symmetric_difference_update(other)

#或者
set ^= other

更新set集合,set集合中只保留两个集合中不同的元素 >>> i ^= j
>>> i
{1, 2, 3, 6, 7, 8}
本文链接:/tutorial/python3/python3-sets

本文版权归知站所有,未经站长同意不得转载,谢谢尊重作者劳动成果!