《Python 编程从入门到实践》———— 集合

 集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 下方的例子可以观察得到,当集合中存在着重复的元素时,程序会自动把重复的元素进行删除。也就说,每一个集合中的元素是唯一的。

# 输入
fruits = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(fruits)                      

# 输出
{'banana', 'pear', 'apple', 'orange'}

 这里还可以介绍一下集合之间的一些操作,具体的情况请看下方的例子:

# 输入
a = set('asdfyuadbaygfauih')
b = set('asdauihgiauhgauiz')
print(a)
print(a-b)
print(a|b)
print(a&b)
print(a^b)                    

# 输出
{'s', 'i', 'f', 'a', 'h', 'y', 'b', 'u', 'g', 'd'}
{'y', 'f', 'b'}
{'s', 'i', 'f', 'z', 'a', 'h', 'y', 'b', 'u', 'g', 'd'}
{'s', 'i', 'a', 'h', 'u', 'g', 'd'}
{'z', 'f', 'y', 'b'}

 现在对上面的例子进行解释。第一个是直接打印集合 a ;这里因为集合的元素是不重复的,所以会将重复的元素进行删除;第二个是集合 a 中包含而集合 b 中不包含的元素,相当于在两个集合中 a 集合独有的元素;第三个是集合 a 或 b 中包含的所有元素,相当于数学定义的并集;第四个是集合 a 和 b 中都包含了的元素,相当于数学定义的交集;第五个是不同时包含于 a 和 b 的元素,相当于两集合中 a 集合与 b 集合独有的元素的并集。


 类似列表推导式,同样集合支持集合推导式(Set comprehension)。这里解释一下列表推导式的语法格式如下:
   [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ] 。此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。
 这里解释一下列表推导式的语法格式如下:
   (表达式 for 变量 in 列表 if 条件)。此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。由上面的两个语法来看,存在区别的地方只有括号的不一样。

# 输入
a = {x for x in 'awegfsdfauihyuiy' if x not in 'asdgadga'}
print(a)               

# 输出
{'h', 'u', 'y', 'e', 'i', 'w', 'f'}

 介绍完了集合的一些属性和运算之后,我们开始可以介绍集合的基本操作。
1、添加元素
 这里介绍两种方法来实现元素的添加。一种是add(),另外一种是update()。使用 update 的方法,也可以添加元素,且参数可以是列表,元组,字典等;如果需要添加多个元素,需要使用 ”,“ 区分开来。

# 输入
fruits = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(fruits)
fruits.add("watermelon")
print(fruits)            

# 输出
{'banana', 'orange', 'pear', 'apple'}
{'pear', 'orange', 'banana', 'watermelon', 'apple'}
# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits)
fruits.update(["watermelon","peach"],["cherry"])
print(fruits)              

# 输出
{'apple', 'orange', 'banana', 'pear'}
{'peach', 'pear', 'watermelon', 'orange', 'banana', 'cherry', 'apple'}

2、删除元素
 这里介绍三种方式,一种是 remove();第二种是 discard();第三种是 pop()。这三种方法的区别,我们依据具体的例子来进行理解。
 首先是第一种 remove()

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits)
fruits.remove("apple")
print(fruits)              

# 输出
{'pear', 'apple', 'banana', 'orange'}
{'pear', 'banana', 'orange'}

 这里将元素 ”apple“ 从集合 fruits 中移除。如果元素不存在,则会发生错误。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits)
fruits.remove("cherry")
print(fruits) 

# 输出
{'banana', 'apple', 'orange', 'pear'}
Traceback (most recent call last):
  File "C:/script/set.py", line 3, in <module>
    fruits.remove("cherry")
KeyError: 'cherry'

 其次是第二种 discard()
 与第一种不同的地方是:如果元素不存在,不会发生错误。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits)
fruits.discard("cherry")
print(fruits)            
fruits.discard("apple")
print(fruits)


# 输出
{'apple', 'pear', 'orange', 'banana'}
{'apple', 'pear', 'orange', 'banana'}
{'pear', 'orange', 'banana'}

 其次是第三种 pop()
 使用 pop() 设置随机删除集合中的一个元素。我所理解的是因为集合每次的排序其实是无序的,也就是元素的位置其实是不确定的,这就决定了可以使用 pop 来实现随机删除左边的第一个元素。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits)
print(fruits.pop())            

# 第一次输出
{'apple', 'orange', 'banana', 'pear'}
apple
# 第二次输出
{'banana', 'apple', 'orange', 'pear'}
banana

3、计算元素
 可以通过 len() 来计算集合中的元素。这里是不存在差1的问题的。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(len(fruits))       

# 输出
4

4、清空集合
 可以通过 clear() 来清空集合。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print(fruits.clear())       
     

# 输出
None

4、判断元素是否在集合内
 可以通过 in 来实现判断元素是否在集合内。

# 输入
fruits = {'apple', 'orange' , 'pear', 'banana'}
print('apple' in fruits)      
print('Apple' in fruits)      
     

# 输出
True
False

集合内置方法完整列表
NameDescription
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
difference()返回多个集合的差集
difference_update()移除集合中的元素,该元素在指定的集合也存在
discard()删除集合中指定的元素
intersection()返回集合的交集
intersection_update()返回集合的交集
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
issubset()判断指定集合是否为该方法参数集合的子集
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop()随机移除元素
remove()移除指定元素
symmetric_difference()返回两个集合中不重复的元素集合
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中
union()返回两个集合的并集
update()给集合添加元素

学习笔记:

  1. 对于程序来说: s.update( “字符串” ) 与 s.update( {“字符串”} ) 含义不同。具体表现为第一种方式会将字符串拆分成单个字符然后输入到集合中,第二种是将整个字符串输入到集合中。相同的地方是如果出现相同的元素均会删除。
  2. 对于列表、元组等可操作的类型,可以通过 set() 这种方式来去重。
  3. 使用了 sorted 对集合进行排序之后,并不会影响集合的初始排序,所以在使用 pop 实现删除元素的时候仍然存在着随机性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小趴菜_自动驾驶搬砖人

谢谢大爷赏饭吃

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

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

打赏作者

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

抵扣说明:

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

余额充值