集合

集合是一个无序的不重复元素序列,可以迭代,也可以修改。集合迭代的时候元素是随机的。

集合通常用来 membership testing, 去重, 也可以用来求交集并集补集。

介绍一下如何创建集合和集合常见的用法。

创建集合

	>>> s1 = set()
>>> print(s1)
set() >>> l1 = [1, 2, 3, 4, 5, 4, 3]
>>> s2 = set(l1)
>>> print(s2)
{1, 2, 3, 4, 5}
#可以看到集合可以用来去重 >>> s3 = set('jwang')
>>> print(s3)
{'n', 'w', 'j', 'g', 'a'}
# 可以看到集合迭代的时候元素是随机的 >>> s4 = set(["C", “C++”, “Python”])
>>> print(s4)
{'C', 'Python', 'C++'}

修改集合

  1. 添加 add

    	>>> print(s2)
    {1, 2, 3, 4, 5}
    >>> s2.add(6)
    >>> print(s2)
    {1, 2, 3, 4, 5, 6}
    >>> s2.add((7,8))
    >>> print(s2)
    {1, 2, 3, 4, 5, 6, (7, 8)}
  2. 更新:通过传入一个列表来更新 update(list)

  	>>> print(s2)
{1, 2, 3, 4, 5, 6, (7, 8)}
>>> s2.update([6, 0])
>>> s2
{0, 1, 2, 3, 4, 5, 6, (7, 8)}
>>> s2.update([7, 8, 9], [10, 11])
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, (7, 8)}
>>>

更新:通过传入一个集合来更新 update(set)

  >>> s2.update({100, 200})
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)}
  1. 删除 remove(val) discard(val)


    不同点是remove在元素不存在时会报错,discard什么也不做。

      >>> s2.remove(0)
    >>> s2
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)}
    >>> s2.discard(0)
    >>> s2.remove(0)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    KeyError: 0

一些其他方法

	# copy 浅复制
>>> s3 = s2.copy()
>>> s3
{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)}
# clear 清空
>>> s3.clear()
>>> s3
set()
# set pop(),随机删除一个元素,并返回
>>> s = set([1, 2, 3])
>>> s.pop()
1
>>> s
{2, 3}

集合间操作

  1. 交集

    >>> s2 = set([1, 2, 3, 4, 5, 10, 15, 22])
    >>> s1 = set([1, 2, 3, 4, 5, 6, 7, 8])
    >>> s1 & s2
    {1, 2, 3, 4, 5}
    >>> s1.intersection(s2)
    {1, 2, 3, 4, 5}
  2. 求集合的不同

    >>> s1.difference(s2)
    {8, 6, 7}
    >>> s2.difference(s1)
    {10, 22, 15}
  3. 是不是子集

    >>> s3 = set([6, 7, 8])
    >>> s2.issubset(s2)
    True
    >>> s2.issubset(s1)
    False
    >>> s1.issuperset(s3)
    True

最新文章

  1. 使用keytool生产jks证书
  2. 史上最全JS表单验证封装类
  3. oh-my-zsh的使用
  4. Lua 的函数库 01
  5. [总结]FFMPEG视音频编解码零基础学习方法--转
  6. VS2010安装Visual Assist
  7. tag标签记录
  8. GPIO控制LED
  9. 借书证信息管理系统,C语言实现
  10. VS2017 性能优化方法
  11. SpringBoot读取yml中的配置,并分离配置文件
  12. Nevertheless 和 Nonetheless,你用对了吗?
  13. Spring AOP+Log4j记录项目日志
  14. ural1297
  15. MVC的Forms登录验证
  16. 使用Docker中国官方镜像的加速地址
  17. php 多页面间共享变量
  18. POJ 1270 Following Orders(拓扑排序)题解
  19. MT【155】单调有界必有极限
  20. 机器学习理论之SVM

热门文章

  1. python3-xlwt-Excel设置(字体大小、颜色、对齐方式、换行、合并单元格、边框、背景、下划线、斜体、加粗)
  2. 线段树求后继+环——cf1237D
  3. IReport实践指南
  4. 转载-NX11.0二次开发新增Spreadsheet相关类的用法!
  5. Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
  6. 为什么TCP 会粘包断包UDP不会
  7. swapper_pg_dir的作用
  8. zip压缩详细分析
  9. leetcode.数组.283移动零-Java
  10. Django的日常-数据传输