集合(set)

  集合是一个无序、可变、不允许数据重复的容器

s = {11,22,33,'ccc'}
  • 无序,无法通过索引取值
  • 可变,可以添加和删除元素
s = {11,22,33,44}
s.add(999)
print(s) #{33, 999, 11, 44, 22}
  • 不允许数据重复
s = {11,22,33,44,55,33,44}
print(s) #{33, 11, 44, 22, 55}

一般什么时候用集合呢?就是想要维护一大堆的不重复的数据的时候。

  • 定义空集合时,只能使用set(),不能用{}

  独有功能

  添加元素

data = {'小明','晓虹','小白'}
data.add('小青')
print(data) #{'小青', '小明', '晓虹', '小白'}

  删除元素

data = {'小明','晓虹','小白'}
data.discard('小白')
print(data) #{'小明', '晓虹'}

  交集

  • 两个集合之间,找相同的元素
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'} s3 = s1 & s2
s4 = s1.intersection(s2)
print(s3,s4) #{'小白'}

  并集

  • 两个集合,合并在一起,重复的元素仅留一个
s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 | s2
s4 = s1.union(s2)
print(s3,s4) #{'晓虹', '晓晓', '大白痴', '小明', '小白'}

  差集

s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}
s3 = s1 - s2
s4 = s1.difference(s2)
print(s3,s4) #{'小明', '晓虹'}
#两个集合,s1中有的且s2中没有的值 s3 = s2 - s1
s4 = s2.difference(s1)
print(s3,s4) #{'晓晓', '大白痴'}
#两个集合,s2中有的且s1中没有的值

  公共功能

  减,计算差集

s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'}

s3 = s1 - s2
print(s3) #{'小明', '晓虹'}

  &,计算交集

s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'} s3 = s1 & s2
print(s3) #{'小白'}

  |,计算并集

s1 = {'小明','晓虹','小白'}
s2 = {'晓晓','小白','大白痴'} s3 = s1 | s2
print(s3) #{'晓虹', '晓晓', '大白痴', '小明', '小白'}

  长度

s = {'小明','晓虹','小白'}
data = len(s)
print(data) #3

  for循环

s = {'小明','晓虹','小白'}
for item in s:
print(item)

  转换

  • int/list/tuple/dict都可以通过set()转换为集合
s1 = '大丈夫'
s2 = set(s1)
print(s2) #{'夫', '丈', '大'} s1 = {11,22,33,44,22,11}
s2 = set(s1)
print(s2) #{33, 11, 44, 22} s1 = (11,22,33,44,22,11,)
s2 = set(s1)
print(s2) #{33, 11, 44, 22}

  元素必须可哈希

  集合的元素只能是int,bool,str,tuple,而list,set是不可哈希的

  • 转换成功
s1 = [11,22,33,44,11,3,99,22]
s2 = set(s1)
print(s2) #{33, 3, 99, 11, 44, 22}
  • 转换失败
s1 = [11,22,['阿斯顿','大扫荡'],33]
s2 = set(s1)
print(s2)

  集合查找速度特别

  • 低效率
list = ['阿斯顿','打底衫','小明']
if '小明' in list:
print('在')
else:
print('不在') tuple = ('阿斯顿', '打底衫', '小明',)
if '小明' in tuple:
print('在')
else:
print('不在')
  • 高效率
set = {'阿斯顿','打底衫','小明'}
if '小明' in set:
print('在')
else:
print('不在')

 

09、集合set的更多相关文章

  1. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  2. 《2013传智播客视频》-wmv,avi,mp4.目录

    \!--14俄罗斯方块\视频\.复习.avi; \!--14俄罗斯方块\视频\ 复习.avi; \!--14俄罗斯方块\视频\ 形状旋转.avi; \!--14俄罗斯方块\视频\ 判断形状能否变形.a ...

  3. js中的正则表达式【常用】

    正则表达式是一种用于处理字符串匹配的强大工具,正则的核心在于匹配语法. 以下是常用的匹配规则 . 除了换行符之外的任意一个字符 \ 转义符,取消后面一个字符的含义,使其成为一个普通字符 [] 括号里的 ...

  4. Java入门笔记 00-前言&目录

    前言:这本笔记记录的是Java基础部分的学习内容,大部分内容总结性的,包括: ---01 Java基础语法 ---02 数组 ---03 面向对象 ---04 异常处理 ---05 多线程 ---06 ...

  5. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. Day_12【集合】扩展案例3_产生10个长度为10,不能重复,由数字0-9,小写字母和大写字母组成的字符串

    分析以下需求,并用代码实现 1.产生10个1-20之间的随机数要求随机数不能重复 2.产生10个长度为10的不能重复的字符串(里面只能出现大写字母.小写字母.0-9的数字),并遍历打印输出 代码 pa ...

  7. Day_11【集合】扩展案例4_删除长度大于5的字符串,删除元素包含0-9数字的字符串

    分析以下需求,并用代码实现 1.定义ArrayList集合,存入多个字符串 如:"ab1" "123ad" "bca" "dadf ...

  8. Java多线程系列--“JUC集合”09之 LinkedBlockingDeque

    概要 本章介绍JUC包中的LinkedBlockingDeque.内容包括:LinkedBlockingDeque介绍LinkedBlockingDeque原理和数据结构LinkedBlockingD ...

  9. Java 集合系列09之 Map架构

    概要 前面,我们已经系统的对List进行了学习.接下来,我们先学习Map,然后再学习Set:因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过 ...

  10. Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨

    1.Collection集合迭代器使用的问题探讨: (1)问题1:能用while循环写这个程序,我能不能用for循环呢?                  可以使用for循环替代. (2)问题2:不要 ...

随机推荐

  1. 数据分析常用库(numpy,pandas,matplotlib,scipy)

    概述 numpy numpy(numeric python)是 python 的一个开源数值计算库,主要用于数组和矩阵计算.底层是 C 语言,运行效率远高于纯 python 代码.numpy主要包含2 ...

  2. Python import本地模块

    无法识别本地模块 在pycharm中选择文件夹Mark Directory as -> Source root. 或者使用sys.path.append()添加文件夹路径 还是报错ImportE ...

  3. 多线程(四) AQS底层原理分析

    J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发 场景中使用的组件.比如线程池.阻塞队列.计时器.同步器.并发集合等等.并 发包的作者 ...

  4. nodejs非安装版配置(windows)

    nodejs官网下载地址: https://nodejs.org/en/download/ 解压到本地并配置环境变量 在环境变量path中新增 D:\develop\node 查看是否配置成功 至此n ...

  5. apt 和 apt-get 之间有什么区别?

    使用ubuntu的朋友一定会接触一个命令就是apt-get . 使用该工具安装各种应用程序那叫一个爽. 在 Ubuntu 16.04 发行后,apt使用渐渐频繁起来. 那么,apt-get 与 apt ...

  6. Node.js 文件上传 cli tools

    Node.js 文件上传 cli tools byte stream 断点续传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. flutter 1.5 in action

    flutter 1.5 in action https://flutter.dev/docs/get-started/flutter-for/react-native-devs https://flu ...

  8. web hack & web security

    web hack & web security https://www.hacksplaining.com/lessons https://www.hacksplaining.com/ OK ...

  9. modal over table bug

    modal over table bug table can not clickable bad <el-row> <el-col :span="24"> ...

  10. parcel bug & not support normal import React & ReactDOM module

    bug report not support normal import React & ReactDOM module, why Code Sample OK import * as Rea ...