集合(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. Leetcode 30 串联所有单词的子串 滑动窗口+map

    见注释.滑动窗口还是好用. class Solution { public: vector<int> findSubstring(string s, vector<string> ...

  2. 秋招C++面试相关总结索引

    C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...

  3. codevs1154能量项链 环形区间DP 细节

    中文题..题意略 我们知道每次枚举最后合并哪两个.. 于是枚举中间节点k 我犯的错误是将转移方程写成了,dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]+a[l]*a ...

  4. Flutter CLI commands All In One

    Flutter CLI commands All In One Flutter run key commands. r Hot reload. R Hot restart. h Repeat this ...

  5. GitHub rename the default branch from master to main

    GitHub rename the default branch from master to main master => main Repository default branch Cho ...

  6. how to write a node cli tool

    how to write a node cli tool https://www.google.com/search?q=how+to+node+cli+tool&oq=how+to+node ...

  7. 增强 CT & CT & MR

    增强 CT & CT & MR CTA,增强 CT Computed Tomography (CT) CT 计算机断层扫描 Computed Tomography (CT) Angio ...

  8. js 的 ArrayBuffer 和 dataView

    arrayBuffer文档 一个十六进制代表4位,0xF = 1111,0xFF = 1111 1111,八位是1字节,所以通常用两个16进制代表1字节. 假如我申请一个8字节的内存空间,然后初始化为 ...

  9. 转换时间戳,兼容webkit和IE

    var date="2018-6-6"; var test=Date.parse(date.replace(/-/g,"/"));console.log(tes ...

  10. 云原生系列6 基于springcloud架构风格的本地debug实现

    debug是程序员在日常开发中最常使用的操作, 那么,你是如何快速在微服务架构风格下快速debug后端服务呢? 开发现状 开发的理想状态 本地调测的使用步骤 登录智能网关 如果集成开发环境是在本地局域 ...