013 集合

简介

  • 英文名: set
  • “无序”:元素排名不分先后
  • “不重复”:一个集合中的元素都是独一无二的
  • 原来的标题:《集合:你不能两次进入同一个集合》
  • 现在的标题:《集合》
  • 更改原因:remove 之后仍然可以 add 进去

创建

>>> s1 = set()
>>> s1
set()
>>> type(s1)
<class 'set'>
>>> 
>>> s2 = {1, 2, 3, 4, 5}
>>> s2
{1, 2, 3, 4, 5}
>>> type(s2)
<class 'set'>
>>> 

ps

  • {} 被字典占用了,d = {} 创建的是字典

特性

概述

  • 因为集合内数据“无序”,所以无法使用索引与分片
  • 因为集合内数据“唯一”,所以可以用来排除重复数据
  • 集合内部只能放置可哈希数据,如 str, int, float, tuple, frozenset

例1

>>> s1 = {1, 2, 3}
>>> s2 = {4, 5, 6}
>>> s1 + s2
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    s1 + s2
TypeError: unsupported operand type(s) for +: 'set' and 'set'
>>> 

例2

  • 看成概率统计就行
>>> s1 = {1, 2, 3, 4, 5}
>>> s2 = {4, 5}
>>> s3 = {4, 5, 6, 7}
>>> s1 - s2
{1, 2, 3}
>>> s1 - s3
{1, 2, 3}
>>> 

例3

>>> s = {1, 2, 3, "york", "fish"}
>>> "york" in s
True
>>> 6 in s
False
>>> 

遍历

例1

>>> s = {1, 2, 3, "york", "fish"}
>>> for e in s:
    print(e, end=' ')

    
1 2 3 york fish 
>>> 

例2

>>> s = {(1, 2, 3), ("i", "york", "fish"), (4, 5, 6)}
>>> for e in s:
    print(e)

    
('i', 'york', 'fish')
(1, 2, 3)
(4, 5, 6)
>>> 
>>> for i, j, k in s:
    print(i, j, k)

    
i york fish
1 2 3
4 5 6
>>> 

生成式

>>> s1 = {e for e in range(10)}
>>> s1
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 
>>> s2 = {e for e in range(20) if e % 2 == 0}
>>> s2
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
>>> 

内置方法

  • 17 个内置方法详见下篇

其他方法

len(), max(), min()

>>> s = {e for e in range(10)}
>>> len(s)
10
>>> max(s)
9
>>> min(s)
0
>>> 

转换类型

>>> s = {e for e in range(10)}
>>> list(s)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l = [e for e in range(10)]
>>> set(l)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 
  • 元组类似 list

frozenset

  • frozenset 即冰冻集合,是一种特殊的集合
  • frozenset 是不可以进行任何修改的集合
  • frozenset8 个内置方法,详见下下篇
>>> # 简单举例
>>> s = frozenset()
>>> s
frozenset()
>>> type(s)
<class 'frozenset'>
>>> 
原文地址:https://www.cnblogs.com/yorkyu/p/10290648.html