【Python】Python之Set类型

【Python】Python之Set类型

紧跟着前面博文的 dirt 类型,这次我们来讲讲 Python 中与 dirt 类型有相似之处的 set 类型。接下来我们开始正文。

Python之什么是 set 类型

根据之前博文内容,我们知道 dict 的作用是建立一组 key 和一组 value 的映射关系,dict 的 key 是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时 set 就派上用场了。
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。

创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:

s = set(['A', 'B', 'C'])
print( s )

我们可以查看 set 的输出内容:
在这里插入图片描述
值得注意的是:上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。

因为 set 不能包含重复的元素,所以当我们传入包含重复元素的 list 就会出现如下的结果:

s = set(['a', 'p', 'p', 'l','e'])
print( s )
print(len( s ))

测试:
在这里插入图片描述
结果显示,set 会自动去掉重复的元素,原来的list有5个元素,但set只有4个元素。

Python之 访问 set 类型

由于set存储的是无序集合,所以我们没法通过索引来访问,所以访问 set 中的某个元素实际上就是判断一个元素是否在set中。

假设存储了班里同学名字的 set ,如下:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
print( s )

我们可以使用 in 操作符来进行相应的判断正误,最后会输出 bool 值:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
print( s )
print( 'Paul' in s )
print( 'Lisa' in s )
print( 'Ned' in s )
print('paul' in s )
print( 'ned' in s )

测试如下:
在这里插入图片描述
要注意:英文字母的大小写很重要,‘Paul’ 和 ‘paul’ 或是 ‘Ned’ 和 ‘ned’ 被认为是两个不同的元素。

Python之 set 类型的特点

set的内部结构和dict很像,唯一区别是不存储value,因此判断一个元素是否在 set 中速度很快;set存储的元素和 dict 的 key 类似,必须是不变对象,因此任何可变对象是不能放入set中的。

同时 set 存储的元素也是没有顺序的。

set 的这些特点,应用到我们日常的生活中其实也是挺方便的。
我们举一个贴近于生活且比较简单的例子:
假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期嘞?
其实我们可以用我们之前学的 if 语句进行判断,但这样做十分繁琐:

x = input()
if (x!= 'MON' and x!= 'TUE' and x!= 'WED' and x!= 'THU' and x!= 'FRI' and x!= 'SAT' and x!= 'SUN'):
    print ('input error')
else:
    print ('input ok')

从上文代码块中,我们可以很明显的感觉到使用 if 语句的繁琐,但如果我们使用今天学的 set 类型,事先创建好一个set,包含’MON’ ~ ‘SUN’,然后再判断输入是否有效,只需要判断该字符串是否在 set中就行了,这样一来代码就简单多了:

weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x= input()
if x in weekdays:
    print ('input ok')
else:
    print ('input error')

测试结果如下:
在这里插入图片描述

Python之 遍历set类型

由于 set 也是一个集合,所以遍历 set 和遍历 list 类似,都可以通过 for 循环实现。
直接使用 for 循环可以遍历 set 的元素:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
for name in s:
   print ( name )

测试结果:
在这里插入图片描述
注意: 观察 for 循环在遍历 set 时,元素的顺序和 list 的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同。

接下来,我们来看一个例题
请用 for 循环遍历如下的set,打印出 name : score .

s = set([('Adam', 92), ('Lisa', 85), ('Bart', 66),('Paul',88),('Ned',99)])

题目解析
注意到set的元素是tuple,因此 for 循环的变量被依次赋值为tuple。
代码参考:

s = set([('Adam', 92), ('Lisa', 85), ('Bart', 66),('Paul',88),('Ned',99)])
for x in s:
    print (x[0] , ':' , x[1])

测试结果:
在这里插入图片描述
在这里我们要注意一个点,就是倘若我们修改原题目题设为:请用 for 循环遍历如下的set,打印出 name: score .(自己看会发现,name后面少一个空格space
那我们的代码也需要做出适时的调整:

s = set([('Adam', 92), ('Lisa', 85), ('Bart', 66),('Paul',88),('Ned',99)])
for x in s:
    print (x[0] + ':' , x[1])

测试结果:
在这里插入图片描述
于此,该题解答到此结束。

Python之 更新set

由于set存储的是一组不重复的无序元素,因此更新set主要做两件事:
一是把新的元素添加到 set 中,二是把已有元素从 set 中删除。

添加元素时用 set 的 add( ) 方法:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
s.add('Amy')
print( s )

测试结果:
在这里插入图片描述
如果添加的元素已经存在于 set 中,add( ) 不会报错但是不会加进去了:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
s.add('Ned')
print( s )

测试结果:
在这里插入图片描述
删除 set 中的元素时可以用 set 的 remove( ) 方法:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
s.remove('Ned')
print( s )

值得注意的是,如果删除的元素不存在 set 中,remove( ) 会报错:

s = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
s.remove('Amy')
print( s )

测试结果:
在这里插入图片描述
因此,在用 add( ) 可以直接添加无须担心,而使用 remove( ) 前需要判断。

下面我们再来看一个简单的例题
针对下面的set,给定一个list,对list中的每一个元素,如果在set中,就将其删除,如果不在set中,就添加进去。

s = set(['Adam', 'Lisa', 'Paul'])
l = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])

本题解析
在本题中,如果要判断元素是否在 set 中就要使用 in 操作符了。
代码参考如下:

s = set(['Adam', 'Lisa', 'Paul'])
l = set(['Adam', 'Lisa', 'Bart', 'Paul','Ned','Lucy'])
for name in l:
    if name in s:
        s.remove(name)
    else:
        s.add(name)
print ( s )

测试结果:
在这里插入图片描述
尾语:其实也没什么,就是简单的 set 类型基础,讲完了然后灵活运用,熟能生巧。
同时接近十二月,一九年和二零年要换班了,考试月也马不停蹄,大家都要加油了!!!

Python中的数据类型set是一种集合类型,它是基本数据类型之一。set是一个无序的、可变的集合,其中的元素是唯一且不可变的。集合中的元素可以是任意类型,但不能包含重复的元素。set类型没有索引和切片操作。在Python中,set有可变集合和不可变集合两种类型。可变集合可以原地修改,而不可变集合是被"冻结"的,不能进行修改。 创建set类型的方式有多种。可以直接将元素放在花括号{}内,以逗号分隔,即可创建一个集合。集合中的元素可以是任意类型,但不能包含可变元素,如列表、集合或字典。例如,创建一个包含数字、字符串和元组的集合: a = {1, 2, 3, 4, 'a'} 也可以使用set()或frozenset()函数创建集合。set()函数用于创建可变集合,而frozenset()函数用于创建不可变集合。例如,使用set()函数创建一个集合: set('boy') 会返回set(['y', 'b', 'o']) 最后,还可以创建一个空的set集合。 综上所述,Python中的数据类型set是一种无序、可变的集合,其中的元素是唯一且不可变的。可以使用多种方式来创建set集合。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python(3):六大数据类型——Tuple/Dict/Set](https://blog.csdn.net/qq_40558166/article/details/96495761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python数据类型 - set 集合](https://blog.csdn.net/weixin_34357436/article/details/88772949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值