集合(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. Redis内存管理中的LRU算法

    在讨论Redis内存管理中的LRU算法之前,先简单说一下LRU算法: LRU算法:即Least Recently Used,表示最近最少使用页面置换算法.是为虚拟页式存储管理服务的,是根据页面调入内存 ...

  2. hdu5693D++游戏 区间DP-暴力递归

    主要的收获是..如何优化你递推式里面不必要的决策 之前的代码 这个代码在HDU超时了,这就对了..这个复杂度爆炸.. 但是这个思路非常地耿直..那就是只需要暴力枚举删两个和删三个的情况,于是就非常耿直 ...

  3. 使用 Canvas 实现一个类似 Google 的可视化的页面错误反馈库

    使用 Canvas 实现一个类似 Google 的可视化的页面错误反馈库 iframe 嵌套 iframe iframe 包含 复制的 HTML 页面 和支持可以拖拽的工具栏 鼠标经过上面,智能识别 ...

  4. YouTube 视频下载工具

    YouTube 视频下载工具 我不生产视频,只是优秀视频的搬运工! YouTube-dl https://github.com/search?q=youtube-dl https://github.c ...

  5. node.js & fs & file read & file write

    node.js & fs & file read & file write https://nodejs.org/api/fs.html const fs = require( ...

  6. dart2native 使用Dart 在macOS,Windows或Linux上创建命令行工具

    下载dart2.6以上 >dart2native --help 编写源文件 // bin\main.dart main(List<String> args) { print('hel ...

  7. 2021,狗狗币暴涨,VAST更加疯狂!

    2021年的币圈,多多少少出乎人的意料.很多币圈玩家们看好比特币,比特币却在达到4万美金的巅峰之后,极速下滑.很多玩家们看好以太坊,以太坊的手续费却出现了飙涨,让众多的中小散户们再次退却.而前几年已经 ...

  8. NGK项目好不好?

    在谈NGK项目之前,我们不得不提到NGK背后的研发团队,硅谷顶尖技术团队灵石团队.硅谷作为全世界最顶尖的高新技术和科技创新产业区,NGK.IO区块链系统正是在此处诞生. 灵石部门核心成员曾负责过多个P ...

  9. NGK是公链吗?NGK为何会这么火?

    NGK号称区块链3.0的经典代表之作,公链底层技术开源发布,支撑百万级应用场景,集合了其他公链的优点,不仅拥有超高的TPS,军业级DPOSS共识机制,还有极高的网络确认速度和转账速度.更重要的是无需矿 ...

  10. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...