|
|
51CTO旗下网站
|
|
移动端

2.2.9 集合与不可变集合(2)

《自学Python:编程基础、科学计算及数据分析》第2章Python 基础,在本章中,我们将学习Python 语言的基本使用,掌握Python 的基本使用方法,为后续的学习打下基础。本节为大家介绍集合与不可变集合。

作者:李金来源:机械工业出版社|2018-05-03 17:25

2.2.9 集合与不可变集合(2)

在 Python中,判断子集关系可以用运算符“<=”实现:

  1. In [19]: a = {1, 2, 3} In [20]: b = {1, 2} In [21]: b <= a Out[21]: True 

也可以用.issubset()方法来判断是不是某个集合的子集:

  1. In [22]: b.issubset(a) Out[22]: True 

反过来,我们也可以使用“>=”操作符或者集合的.issuperset()方法来验证一个集合是否包含另一个集合:

  1. In [23]: a.issuperset(b) Out[23]: True In [24]: a >= b Out[24]: True 

真子集可以用符号“<”或者“>”去判断:

  1. In [25]: b < a Out[25]: True  
  2. In [26]: a < a   
  3. Out[26]: False  

4.集合的方法

(1).add()方法

跟列表的.append()方法类似,集合用.add()方法添加单个元素。

  1. In [27]: t = {1, 2, 3}   
  2. In [28]: t.add(5)   
  3. In [29]: t   
  4. Out[29]: {1, 2, 3, 5} 

添加的元素必须是不可变类型的。

如果添加的是集合中已有的元素,集合不改变:

  1. In [30]: t.add(3)   
  2. In [31]: t   
  3. Out[31]: {1, 2, 3, 5} 

(2).update()方法

跟列表的.extend()方法类似,.update()方法用来向集合添加多个元素,接受一个序列作为参数:

  1. In [32]: t.update([1, 6, 7])   
  2. In [33]: t   
  3. Out[33]: {1, 2, 3, 5, 6, 7}  

(3).remove()方法移除元素

.remove()方法可以从集合中移除单个元素:

  1. In [34]: t.remove(1)   
  2. In [35]: t   
  3. Out[35]: {2, 3, 5, 6, 7} 

元素不存在时会抛出异常:

  1. In [36]: t.remove(10)  
  2. KeyError    Traceback (most recent call last)   
  3. <ipython-input-36-3bc25c5e1ff4> in <module>()   
  4. ----> 1 t.remove(10)   
  5.  
  6. KeyError: 10 

(4).pop()方法

集合是一种没有顺序的结构,不能像列表一样使用位置进行索引,所以它的.pop()方法不接受参数,随机地从集合中删除并返回一个元素:

  1. In [37]: t.pop()  
  2. Out[37]: 2   
  3. In [38]: t   
  4. Out[38]: {3, 5, 6, 7} 

如果集合为空,调用.pop()方法会抛出异常。

(5).discard()方法

.discard()方法作用与.remove()方法一样,区别在于删除不存在的元素时不会抛出异常:

  1. In [39]: t.discard(3)   
  2. In [40]: t   
  3. Out[40]: {5, 6, 7}  

5.判断从属关系

关键字in也可以用来判断集合中的从属关系:

  1. In [41]: 5 in t   
  2. Out[41]: True   
  3. In [42]: 1 in t   
  4. Out[42]: False  

6.不可变集合

对于集合,Python提供了一种不可变集合(Frozen Set)的数据结构与之对应。不可变集合是一种不可变类型,一旦创建就不能改变,其构建方法如下:

  1. In [43]: s = frozenset([1, 2, 3, 'a', 1])   
  2. In [44]: s   
  3. Out[44]: frozenset({1, 2, 3, 'a'}) 

不可变集合的一个主要用途是用来作为字典的键。如果用元组作为键,(a, b)和(b, a)是两个不同的键。可以使用不可变集合让它们代表同一个键。

例如,之前我们使用元组来表示从城市 A到城市 B之间的航班数,现在我们希望表示两个城市之间的飞行距离:

  1. In [45]: flight_distance = {}   
  2. In [46]: city_pair = frozenset(['Los Angeles', 'New York'])   
  3. In [47]: flight_distance[city_pair] = 2498   
  4. In [48]: flight_distance[frozenset(['Austin', 'Los Angeles'])] = 1233   
  5. In [40]: flight_distance[frozenset(['Austin', 'New York'])] = 1515   
  6. In [50]: flight_distance   
  7. Out[50]:   
  8. {frozenset({'Austin', 'New York'}): 1515,   
  9. frozenset({'Austin', 'Los Angeles'}): 1233,   
  10. frozenset({'Los Angeles', 'New York'}): 2498} 

顺序不同不会影响查找的结果:

  1. In [51]: flight_distance[frozenset(['New York','Austin'])]  
  2. Out[51]: 1515   
  3. In [52]: flight_distance[frozenset(['Austin','New York'])]   
  4. Out[52]: 1515  

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

SQL Server 2005数据库管理与应用高手修炼指南

全书分为基础篇、高级篇和应用篇3个部分,共18章,有重点、分层次地讲解SQL Server 2005的基础知识、高级使用技巧和项目应用方法。第1~10...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊