Python set集合

目录

set集合

创建set集合

使用 {} 创建

set()函数创建集合

访问set集合元素

删除set集合

set集合基本操作

向 set 集合中添加元素

集合中删除元素

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

集合方法(全)

frozenset集合(set集合的不可变版本)

字典和集合


set集合

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

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

Python 中有两种集合类型,一种是 set 类型的集合,另一种是 frozenset 类型的集合,它们唯一的区别是,set 类型集合可以做添加、删除元素的操作,而 forzenset 类型集合不行。

创建set集合

使用 {} 创建

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

其中,setname 表示集合的名称,起名时既要符合 Python 命名规范,也要避免与 Python 内置函数重名。

不能添加列表、字典、集合这类可变的数据。

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

print(a)

运行结果为:

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

set()函数创建集合

set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。该函数的语法格式如下:

setname = set(iteration)

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

如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。

str = [123,"123",'1']
set1 = set(str)

print(type(set1))
print(set1)

str = "abcdefgh"
print(set(str))

str1 = [123,"123",'1',[456,'789']]
print(set(str1))

结果:
TypeError: unhashable type: 'list'
<class 'set'>
{'1', 123, '123'}
{'h', 'g', 'a', 'd', 'e', 'b', 'c', 'f'}

Traceback (most recent call last):
  File "D:/PycharmProjects/pythonProject/main.py", line 11, in <module>
    print(set(str1))
TypeError: unhashable type: 'list'

访问set集合元素

由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来。

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

运行结果为:
1 c (1, 2, 3)

删除set集合

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

del(a)

set集合基本操作

向 set 集合中添加元素

setname.add(element)

其中,setname 表示要添加元素的集合,element 表示要添加的元素内容。

使用 add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据,否则 Python 解释器会报 TypeError 错误。

a = {1,2,3}
a.add((1,2))
print(a)

a.add([1,2])
print(a)

运行结果为:

{(1, 2), 1, 2, 3}
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 4, in <module>
    a.add([1,2])
TypeError: unhashable type: 'list'

集合中删除元素

删除现有 set 集合中的指定元素,可以使用 remove() 方法,该方法的语法格式如下:

setname.remove(element)

使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,则此方法会抛出 KeyError 错误

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

a.remove(1)
print(a)

运行结果为:

{2, 3}

Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 4, in <module>
    a.remove(1)
KeyError: 1

如果我们不想在删除失败时令解释器提示 KeyError 错误,还可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,此方法不会抛出任何错误。

setname.discard(element)

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

a.discard(1)
print(a)

运行结果为:
{2, 3}
{2, 3}

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

有 2 个集合,分别为 set1={1,2,3} 和 set2={3,4,5},它们既有相同的元素,也有不同的元素。以这两个集合为例,分别做不同运算的结果如表 1 所示。

集合方法(全)

 

frozenset集合(set集合的不可变版本)

set 集合是可变序列,程序可以改变序列中的元素;frozenset 集合是不可变序列,程序不能改变序列中的元素。set 集合中所有能改变集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。

frozenset 集合的这些方法和 set 集合中同名方法的功能是一样的。

两种情况下可以使用 fronzenset:

  • 当集合的元素不需要改变时,我们可以使用 fronzenset 替代 set,这样更加安全。
  • 有时候程序要求必须是不可变对象,这个时候也要使用 fronzenset 替代 set。比如,字典(dict)的键(key)就要求是不可变对象。
s = {'Python', 'C', 'C++'}
fs = frozenset(['Java', 'Shell'])
s_sub = {'PHP', 'C#'}

#向set集合中添加frozenset
s.add(fs)
print('s =', s)

#向为set集合添加子set集合
s.add(s_sub)
print('s =', s)

运行结果:
s = {'Python', frozenset({'Java', 'Shell'}), 'C', 'C++'}
Traceback (most recent call last):
    File "C:\Users\mozhiyan\Desktop\demo.py", line 11, in <module>
        s.add(s_sub)
TypeError: unhashable type: 'set'

字典和集合

people = [(178,120,19),(177,140,30),(164,100,18)]

def find_people_info(people,aim_height):
    info=""
    for height,weight,age in people:
        if height == aim_height:
            info = str(height)+' '+str(weight)+' '+str(age)
            return info
    return None

print('The people of height 177 info {}'.format(find_people_info(people,177)))

结果:

The people of height 177 info 177 140 30

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新待开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值