0. 集合的独白

  • 英文名: set
  • 我是数学中的一个基本概念,记得高中的“数学必修一”开篇讲的就是我;当然,高等数学开篇也是讲我。
  • 我可以没有元素,即“空集”
  • 我的元素排名不分先后,即“无序”
  • “弱水三千,只取一瓢饮”,即“不重复”

1. 集合的创建

  • 少废话,上例子
# 例1

s1_1 = set()
s1_2 = {1, 2, 3, 4, 5} print(s1_1)
print(type(s1_1))
print('-'*20) print(s1_2)
print(type(s1_2))
  • 运行结果

set()

<class 'set'>

--------------------

{1, 2, 3, 4, 5}

<class 'set'>


# 例2

s2 = {}

print(s2)
print(type(s2))
  • 运行结果

{}

<class 'dict'>

集合和“字典”都是用大括号括起来,并且空的大括号默认表示“字典”。

关于“字典”,就不挖坑了,讲完集合,之后就是“字典”。


2. 集合的特性

(1) 概述

  • 集合内数据“无序”,所以无法使用索引与分片
  • 集合内数据元素具有唯一性,所以可以用来排除重复数据
  • 集合内部只能放置可哈希数据,如 str、int、float、tuple、冰冻集合等
    • 关于“可哈希”与“不可哈希”,挖个坑,日后填平,编号 Py013-1
  • 序列运算、成员检测等

(2) 少废话,上例子

# 例3.1 序列不可相加

t3_1 = {1, 2, 3}
t3_2 = {4, 5, 6} print(t3_1) t3_1 = t3_1 + t3_2
print(t3_1)
  • 运行结果

{1, 2, 3}

TypeError……unsupported operand type(s) for +: 'set' and 'set'

集合不支持相加。


# 例3.2 序列可减

s3_3 = {1, 2, 3, 4, 5}
s3_4 = {4, 5}
s3_5 = {4, 5, 6, 7} s3_6 = s3_3 - s3_4
s3_7 = s3_3 - s3_5 print(s3_6)
print(s3_7)
  • 运行结果

{1, 2, 3}

{1, 2, 3}

集合间可使用“减法”,这种减法与概率统计中的减法很像。


# 例4 成员检测

s4 = {1, 2, 3, "I", "am", "YorkFish"}
print(s4) if "YorkFish" in s4:
print("Yes.") if "6" not in s4:
print("No.")
  • 运行结果

{'I', 1, 2, 3, 'am', 'YorkFish'}

Yes.

No.


3. 集合的遍历

  • 少废话,上例子
# 例5 for 循环

s5 = {1, 2, 3, "I", "am", "YorkFish"}

for i in s5:
print(i, end=' ') # end 是一个空格
  • 运行结果

I 1 2 3 am YorkFish


# 例6 集合内部嵌套了元组的遍历

s6 = {(1,2,3), ("I","am","YorkFish"), (4,5,6)}

for i in s6:
print(i)
print('-'*30) for k,m,n in s6:
print(k, "---", m, "---", n)
  • 运行结果

(4, 5, 6)

('I', 'am', 'YorkFish')

(1, 2, 3)

------------------------------

4 --- 5 --- 6

I --- am --- YorkFish

1 --- 2 --- 3


4. 集合内涵

  • 少废话,上例子
# 例7 普通的集合内涵

s7_1 = {6, 8, 34, 21, 56, 35, 6, 21, 9}
print(s7_1) s7_2 = {i for i in s7_1}
print(s7_2)
  • 运行结果

{34, 35, 6, 8, 9, 21, 56}

2229867508904

{34, 35, 6, 8, 9, 21, 56}

2229867508904

s7_1 与 s7_2 指向同一片地址,说明它们是同一个集合。


# 例8 带条件的集合内涵

s8_1 = {6, 8, 34, 21, 56, 35, 6, 21, 9}
s8_2 = {i for i in s8_1 if i % 2 == 0} # 取出 s8_1 的偶数 print(s8_1)
print(s8_2)
  • 运行结果

{34, 35, 6, 8, 9, 21, 56}

{8, 34, 56, 6}


# 例9 多循环的集合内涵

s9_1 = {1, 2, 3}
s9_2 = {"I", "am", "YorkFish"} s9_3 = {m*n for m in s9_1 for n in s9_2}
print(s9_3) s9_4 = {m*n for m in s9_1 for n in s9_2 if m == 2}
print(s9_4)
  • 运行结果

{'I', 'am', 'YorkFish', 'YorkFishYorkFishYorkFish', 'II', 'III', 'amam', 'YorkFishYorkFish', 'amamam'}

{'II', 'YorkFishYorkFish', 'amam'}


5. 集合的内置方法


6. 可供集合使用的一些方法/函数

(1) 又见测量君与最值双子

# 例10 len() max() min() 跟其他地方的用法基本一致

s10 = {6, 8, 34, 21, 56, 35, 6, 21, 9}

print(len(s10))
print( max(s10))
print(min(s10))
  • 运行结果

7

56

6

(2) “打不过就加入他们”

# 例11

list11_1 = [6, 8, 34, 21, 56, 35, 6, 21, 9]
s11_1 = set(list11_1)
print(s11_1) s11_2 = {6, 8, 34, 21, 56, 35, 6, 21, 9}
list11_2 = list(s11_2)
print(list11_2)
  • 运行结果

{34, 35, 6, 8, 9, 21, 56}

[34, 35, 6, 8, 9, 21, 56]

元组也是这样的。


(3) 冷酷的 frozenset

  • frozenset 即冰冻集合,是一种特殊的集合
  • frozenset 是不可以进行任何修改的集合
  • frozenset 有 8 个非魔法方法的方法
  • 简单举例
# 例12 创建

s12 = frozenset()

print(s12)
print(type(s12))
  • 运行结果

frozenset()

<class 'frozenset'>

[Python3] 013 集合:你不能两次进入同一个集合的更多相关文章

  1. Set集合对象比较两个元素的方法

    Set集合对象比较两个元素的方法并不是根据“equals()”方法的返回值来比较.而是用“hashCode()”方法来进行判断.只要两个元素的“hashCode()”方法的返回值相同,就认为两个元素相 ...

  2. python3 第十五章 - 数据类型之Sets(集合)

    python的官网里对集合的描述是: Python also includes a data type for sets. A set is an unordered collection with ...

  3. C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)

    /// <summary> /// 实体差异比较器 /// </summary> /// <param name="source">源版本实体& ...

  4. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

  5. Java 单个集合去重与两个集合去重

    一.单个集合去重 描述: 去掉一个集合里重复的元素:将list集合转成hashSet集合,hashSet有自动去重的功能,再利用去重后的hashSet集合初始化一个新的list集合,此时这个list就 ...

  6. java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作

    在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 //在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 List<String> a ...

  7. Collection两个常见的集合类型: ArrayList可重复集有序 ,HashSet不可重复集

    package seday11; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; ...

  8. POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典

    题目链接:http://icpc.njust.edu.cn/Problem/Pku/1182/ 题意:给出动物之间的关系,有几种询问方式,问是真话还是假话. 定义三种偏移关系: x->y 偏移量 ...

  9. Map集合迭代的两种方法

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...

随机推荐

  1. 1118. Birds in Forest (25)

    Some scientists took pictures of thousands of birds in a forest. Assume that all the birds appear in ...

  2. C#基础知识之VS的快捷键汇总

    VS中默认的常用快捷键.可以根据自己的习惯,自己设置快捷方式,工具->选项->环境->键盘. 编辑相关的键盘快捷键 Ctrl + K,Ctrl + C = 注释选定行 Ctrl + ...

  3. ztree点击加号+触发ajax请求

    之前做的时候一直是点击节点才触发ajax事件,配置如下:发现点击节点前面的“+”没有反应,后来发现,应该添加一个折叠的事件. onExpand:zTreeOnClick事件和onClick的一样. v ...

  4. Jdbc连接数据库基本步骤详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Jdbc连接数据库的基本步骤,供大家参考,具体内容如下 package demo.jdbc; import java.s ...

  5. Linux入门 文本编辑器

    Vim vi -r file # 在上次使用vi编辑时发生崩溃,恢复file 在编辑多个文件时候 :n 下一个文件 :e# 回到刚才编辑的文件 撤销操作 撤销前一个命令 输入"u" ...

  6. 【bzoj3171】[Tjoi2013]循环格

    题目描述: 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c) ,你可以沿着箭头防线在格子间行走.即 ...

  7. sh_06_个人信息

    sh_06_个人信息 """ 姓名:小明 年龄:18 岁 性别:是男生 身高:1.75 米 体重:75.0 公斤 """ # 在 Pytho ...

  8. (41)freeRTOS之任务管理

    1. 简介: 在 FreeRTOS 中没有线程和进程的区别,只有一个被翻译成任务的程序,相当于进程的概念,拥有独立的栈空间. 对于实时性,可以分为 软实时.硬实时:桌面电脑的输入处理可以看做是软实时, ...

  9. 170815-关于Session知识点

    Cookie:实际上就是一个头.               服务器会创建Cookie,并且将Cookie以一个响应头的形式发送给浏览器               浏览器收到Cookie以后,会保存 ...

  10. windows 下的定时任务 (原)

    linux 下的定时任务是crontab 以前都是linux的定时任务,这次在windows做了定时任务,简单记录一下(win8 跟 win10为例) windows 2008下的定时任务配置: 控制 ...