Python 第八天 set集合详解

集合用来保存不重复的元素,都是唯一的,互不相同。

集合会将所有元素放在一对大括号 {} 中,相邻元素之间用 "," 分隔,如下所示:

{element1,element2,...,elementn}

elementn 表示集合中的元素,个数没有限制。

同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则Python解释器会抛出TypeError错误。

注意:数据必须保证是唯一的,集合对于每种数据元素,只会保留一份。

示例:

1 a = {1, 2, 1, (1, 2, 3), 'a', 'a'}
2 print(a)

结果:

{1, 2, (1, 2, 3), 'a'}

由于Python中的 set 集合是无序的,所有每次输出时元素的排序顺序可能都不相同。

创建 set集合:

(1)使用 {} 创建:

语法格式:

set_name = {element1, element2,..., elementn}

示例:

1 a = {1, 'b', 1, (1, 2, 3), 'a', 'a'}
2 print(a)

结果:

{1, (1, 2, 3), 'a', 'b'}

(2)set() 函数创建集合:

set() 函数时Python的内置函数,功能是将字符串、列表、元组、range对象等可迭代对象转换成集合。

语法格式:

set_name = set(iteration)

iteration就表示字符串、列表、元组、range对象等数据。

示例:

1 set1 = set("www.baidu.com")
2 set2 = set([1, 2, 3, 4, 5])
3 set3 = set((1, 2, 3, 4, 5))
4 set4 = set(range(1, 9))
5 print(set1)
6 print(set2)
7 print(set3)
8 print(set4)

结果:

{'a', 'm', 'o', 'w', 'b', 'c', '.', 'd', 'i', 'u'}
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}

访问set集合元素:

因为集合中的元素是无序的,无法像列表使用下标访问元素。可以使用循环结构,将集合中的数据逐一读取出来。

示例:

a = {1, 'b', 1, (1, 2, 3), 'a', 'a'}
for en in a:
    print(en, end=' ')

结果:

a 1 b (1, 2, 3)

删除set集合:

使用 del() 语句:

示例:

1 a = {1, 'b', 1, (1, 2, 3), 'a', 'a'}
2 print(a)
3 del a
4 print(a)

结果:

{1, 'b', 'a', (1, 2, 3)}
Traceback (most recent call last):
  File "D:\pythonProject\one day\test.py", line 479, in <module>
    print(a)
NameError: name 'a' is not defined

 

向set集合中添加元素:

可使用set类型提供的 add() 方法实现,语法格式为:

set_name.add(element)

add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型,不能添加列表、字典、集合等可变的数据,要不然Python解释器会报TypeError错误。

示例:

1 a = {1, 2, 3}
2 a.add((1, 2))
3 print(a)
4 a.add([1, 2])
5 print(a)

结果:

Traceback (most recent call last):
  File "D:\pythonProject\one day\test.py", line 586, in <module>
    a.add([1, 2])
TypeError: unhashable type: 'list'
{(1, 2), 1, 2, 3}

从set集合中删除元素:

使用 remove() 方法,语法格式如下:

set_name.remove(element)

如果被删除元素不包含在集合中,则会抛出KeyError错误:

示例:

1 a = {1, 2, 3}
2 a.remove(1)
3 print(a)
4 a.remove(1)
5 print(a)

结果:

{2, 3}
Traceback (most recent call last):
File "D:\pythonProject\one day\test.py", line 586, in <module>
a.remove(1)
KeyError: 1

也可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,不会抛出任何错误。

示例:

1 a = {1, 2, 3}
2 a.remove(1)
3 print(a)
4 a.discard(1)
5 print(a)

结果:

{2, 3}
{2, 3}

做交集、并集、差集运算:

集合最常做的操作就是进行交集、并集、差集以及对称差集运算。

 

 图 1 中,有 2 个集合,分别为 set1={1,2,3} 和 set2={3,4,5},它们既有相同的元素,也有不同的元素。

 

可以通过dir(set)命令查看集合有那些方法:

print(dir(set))

['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

 

posted @ 2022-07-20 16:44  南城古  阅读(165)  评论(0编辑  收藏  举报