课时27 集合:在我的世界里,你就是唯一

目录

 

一、字典的表亲:集合

二、创建集合

三、访问集合

四、不可变集合


一、字典的表亲:集合

Python的字典是对数学中映射概念支持的直接体现。字典有个表亲:集合

>>> num = {}
>>> type(num)
<class 'dict'>
>>> num2 = {1,2,3,4,5}
>>> type(num2)
<class 'set'>

在Python中,如果用大括号括起一堆数字但没有体现映射关系,Python就会认为这堆玩意就是个集合

集合的作用:

>>> num2 = {1,2,3,4,5,4,3,2}
>>> num2
{1, 2, 3, 4, 5}

上面的例子可以看出:集合会把大括号里重复的数据自动清理掉。集合是无序的,它不支持索引,所以不能去索引集合中的某个元素

>>> num2[2]
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    num2[2]
TypeError: 'set' object does not support indexing

二、创建集合

创建集合有两种方法:一种是直接把一堆元素用大括号{}括起来;另一种是用set()

>>> set1 = set([1,2,3,4,5,5])
>>> set1
{1, 2, 3, 4, 5}

现在要去掉列表中重复的元素。如果没有学过集合的时候,可以这么写:

>>> num1 = [1,2,3,4,5,4,3,2,0]
>>> type(num1)
<class 'list'>
>>> temp = []
>>> for each in num1:
	if each not in temp:
		temp.append(each)

		
>>> temp
[1, 2, 3, 4, 5, 0]

学习了集合之后,可以这么说:

>>> num1 = list(set(num1))
>>> num1
[0, 1, 2, 3, 4, 5]

上面的例子中,set()创建的集合内部是无序的,再调用list()将无序的集合转换成列表,就是不能保证原来的列表顺序了(这里Python好心办坏事,把0放在最前面了)。所以如果关注列表中元素的前后顺序问题,在使用set()时候就要提高警惕了

三、访问集合

集合中的元素是无序的,不能像序列那样用下标进行访问,可以通过使用迭代把集合中的数据一个个读取出来

>>> set1 = {1,2,3,4,5,4,3,2,1,0}
>>> for each in set1:
	print(each,end=' ')

	
0 1 2 3 4 5 

当然也可以使用in或not in判断一个元素是否在集合中:

>>> 1 in num2
True
>>> '1' in num2
False

add()方法为集合添加元素,remove()方法删除集合中已知的元素:

>>> num2
{1, 2, 3, 4, 5}
>>> num2.add(6)
>>> num2
{1, 2, 3, 4, 5, 6}
>>> num2.remove(6)
>>> num2
{1, 2, 3, 4, 5}

四、不可变集合

有时候,我们希望集合中的元素具有稳定性,就是说,像元组一样不能随意的增加或者删除集合中的元素。那么我们可以使用frozenset()函数来定义不可变集合:

>>> num3 = frozenset([1,2,3,4,5])
>>> type(num3)
<class 'frozenset'>
>>> num3.add(6)
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    num3.add(6)
AttributeError: 'frozenset' object has no attribute 'add'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值