Python 集合之set详解

目录
  • 引言
  • 集合的定义
  • 集合常用操作
    • 集合添加元素
    • 集合移除元素
    • 集合统计、清空元素
    • 集合元素获取(遍历)
  • 集合之间的运算
    • 集合差运算 -
    • 集合并运算 |
    • 集合交运算 &
    • 集合异或运算 ^
  • 应用场景
    • 普通for循环去重
    • 利用集合简单去重
    • 去重保持原来的顺序
  • 总结

引言

set(集合)虽然用的很少,但它是一个无序的不重复元素序列,用来简单的去重挺快的。

集合的定义

set(集合) 与列表类似,不同之处在于集合的 元素不重复
集合和字典一样也是用 {} 定义,但元素之间使用 , 分隔,或者使用 set()

{ } 定义

#!/usr/bin/python3
# -*- coding:utf-8 -*-
name_set = {'hui', 'wang', 'zack', 'hui'}
print(name_set)    	# 结果为 {'hui', 'wang', 'zack'}
name_set = set('hui', 'wang', 'zack', 'hui')

set() 定义

set() 只接受一个参数

In [13]: name_set = set('hui')
In [14]: name_set
Out[14]: {'h', 'i', 'u'}
In [15]: name_set = set(['hui', 'wang', 'zack', 'hui'])
In [16]: name_set
Out[16]: {'hui', 'wang', 'zack'}

注意:空集合不能用 s = {} 来定义这样默认是字典,应该 s = set()

In [27]: s = {}
In [28]: s1 = set()
In [29]: type(s)
Out[29]: dict
In [30]: type(s1)
Out[30]: set

集合常用操作

集合所有内置方法如下:

方法太多我选几个常用的测试一下。

集合添加元素

使用 add() 即可向集合中添加元素

In [33]: s = set()
In [34]: s.add(1)
In [35]: s.add(4)
In [36]: s.add(3)
In [37]: s
Out[37]: {1, 3, 4}
In [38]: s.add(2)
In [39]: s
Out[39]: {1, 2, 3, 4}

集合移除元素

  • remove() 移除集合中的元素,且如果元素不存在,会报错
  • discard() 移除集合中的元素,且如果元素不存在,不会发生错误
  • pop() 随机移除集合内的一个元素
In [38]: # remove() 移除
In [39]: s
Out[39]: {1, 2, 3, 4}
In [40]: s.remove(3)
In [41]: s
Out[41]: {1, 2, 4}
In [42]: s.remove(5)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-42-9ec04578636f> in <module>
----> 1 s.remove(5)
KeyError: 5
In [45]: # discard() 移除
In [46]: s
Out[46]: {1, 2, 4}
In [47]: s.discard(4)
In [48]: s
Out[48]: {1, 2}
In [49]: s.discard(3)
In [50]: s
Out[50]: {1, 2}
In [56]: # pop() 随机移除
In [57]: s.pop()
Out[57]: 1
In [58]: s
Out[58]: {2, 3, 9, 'hui'}
In [59]: s.pop()
Out[59]: 2
In [60]: s
Out[60]: {3, 9, 'hui'}

其实set 集合的 pop方法会将集合的左边第一个元素进行删除,并返回删除的元素。

集合统计、清空元素

  • len() 统计集合元素个数
  • clear() 清空集合
In [68]: name_set
Out[68]: {'wang', 'zack'}
In [69]: len(name_set)
Out[69]: 2
In [71]: name_set.clear()
In [72]: len(name_set)
Out[72]: 0
In [73]: name_set
Out[73]: set()

集合元素获取(遍历)

集合不支持索引,也没有方法进行获取,因此只能采用 for ... in ... 遍历方式获取元素。

In [81]: name_set
Out[81]: {'hui', 'wang', 'zack'}
In [82]: for name in name_set:
    ...:     print(name)
    ...:
hui
wang
zack
In [83]: name_set[0]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-83-c0ead6d21f1d> in <module>
----> 1 name_set[0]
TypeError: 'set' object is not subscriptable

集合之间的运算

集合差运算 -

In [89]: a = {1, 2, 3, 4, 5}
In [90]: b = {1, 2, 3, 6}
In [91]: a - b
Out[91]: {4, 5}
In [92]: b - a
Out[92]: {6}
In [93]: a.difference(b)
Out[93]: {4, 5}
In [94]: b.difference(a)
Out[94]: {6}

a - b 就相当于在 a 中去除跟 b 相同的元素b - a 也就是在 b 中去除跟 a 相同的元素a - b 等同于 a.difference(b)

集合并运算 |

In [95]: a
Out[95]: {1, 2, 3, 4, 5}
In [96]: b
Out[96]: {1, 2, 3, 6}
In [97]: a | b
Out[97]: {1, 2, 3, 4, 5, 6}

集合交运算 &

In [99]: a
Out[99]: {1, 2, 3, 4, 5}
In [100]: b
Out[100]: {1, 2, 3, 6}
In [101]: a & b
Out[101]: {1, 2, 3}

集合异或运算 ^

In [102]: a
Out[102]: {1, 2, 3, 4, 5}
In [103]: b
Out[103]: {1, 2, 3, 6}
In [104]: a ^ b
Out[104]: {4, 5, 6}

把 a, b 集合中的相同元素都去掉,剩下的就是 ^ 异或运算的结果。

应用场景

普通for循环去重

In [1]: li = [2, 1, 3, 6, 2, 1]
In [2]: temp = []
In [3]: for i in li:
   ...:     if i not in temp:
   ...:         temp.append(i)
   ...:
In [4]: li
Out[4]: [2, 1, 3, 6, 2, 1]
In [5]: temp
Out[5]: [2, 1, 3, 6]

利用集合简单去重

In [106]: li = [1, 2, 2, 3, 3, 5]
In [107]: li = set(li)
In [108]: li
Out[108]: {1, 2, 3, 5}
In [109]: type(li)
Out[109]: set
In [110]:

这样把原来的列表类型变成了集合类型,这样更不好操作,这样不是想要的结果。

因此要做到 去重加类型不变,只要再嵌套一个list() 即可

In [110]: li = [1, 2, 2, 3, 3, 5]
In [111]: li = list(set(li))
In [112]: li
Out[112]: [1, 2, 3, 5]
In [113]: type(li)
Out[113]: list
In [114]:

去重保持原来的顺序

使用 sort + set 去重

In [6]: list1 = [2, 1, 3, 6, 2, 1]
In [7]: list2 = list(set(list1))
In [8]: list2
Out[8]: [1, 2, 3, 6]
In [9]: list2.sort(key=list1.index)
In [10]: list2
Out[10]: [2, 1, 3, 6]

使用 sorted + set 去重

In [12]: list1 = [2, 1, 3, 6, 2, 1]
In [13]: temp = sorted(set(list1), key=list1.index)
In [14]: temp
Out[14]: [2, 1, 3, 6]

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python--字典(dict)和集合(set)详解

    目录 一.集合 1.集合定义 2.创建集合 3.去重 4.集合增删 5.关系运算 6.排序 7.frozenset 8.练习 9.特性 二.字典 1.字典定义 2.字典打印 3.字典元素删除 4.setdefault 5.defaultdict 总结 一.集合 1.集合定义 集合(set)是一个无序的不重复元素序列. 2.创建集合 使用大括号 { } 或者 set() 函数创建集合; 创建一个空集合必须用 set() 而不是 { } { } 是用来创建一个空字典. s = {1,2,3,4} p

  • python基础之set集合详解

    一.set 集合 集合(set)是一个无序的不重复元素序列. 可以使用大括号 {} 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 二.创建集合 print({"1", "2", "3"})  # {'2', '3', '1'} print(set("123"))  # {'2', '3', '1'} print(set((1, 2, 3)))  #

  • 详细介绍Python中的set集合

    目录 Python中的set集合 一.集合是什么? 二.set集合怎么用? 1.创建set集合 2.删除set集合 3.访问set集合元素 4.删除集合中的元素 5.向集合中添加元素 三.set集合的交并补 1.交集 2.并集 3.差集 四.set中的其他方法 五.frozenset 集合 Python中的set集合 一.集合是什么? 集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型.也一定在数学课堂上听过集合这个名词.数学中的集合是一个基本概念,说白了一堆不重复的数字可以组成一个集合

  • 基于python的列表list和集合set操作

    以下是一些python的list和set的基本操作 1. list的一些操作 list = [1, 2, 3] list.append(5) print(list) list.extend([7, 8]) # extend是将可迭代对象的元素依次加入列表 print(list) list.append([7, 8]) # append是把传入的参数当成一个元素加入列表 print(list) list.reverse() # 元素翻转,注意不能将这个操作赋给一个变量,此操作是对list本身操作,

  • Python中基础数据类型 set集合知识点总结

    集合的简介 集合是一个无序.不重复的序列 它的基本用法包括成员检测和消除重复元素 集合对象也支持像 联合,交集,差集,对称差分等数学运算 集合中所有的元素放在 {} 中间,并用逗号分开 集合的例子 这里会有个重点知识 # 声明 basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} print(basket) set_ = {1, 1, 1, 1, 2} print(set_) # 输出结果 {'orange', 'pe

  • python set集合使用方法解析

    这篇文章主要介绍了python set集合使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义 定义:在{}中用逗号隔开,集合具备以下3个特点: 1.每个元素必须是不可变类型 2.集合内没有重复元素 3.集合内元素无序 my_set = {1, 2, 3, 4} # 本质上 my_set = set({1, 2, 3, 4}) # 注意1:列表是索引对应值,字典是key对应值,均可以取得单个值. # 而集合类型既没有索引也没有key

  • Python 实现集合Set的示例

    Python的集合set原理 集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. class Array(object): def __init__(self, size=32, init=None): self._size = size self._items = [init] * self._size def __getitem__(self, ind

  • Python 集合之set详解

    目录 引言 集合的定义 集合常用操作 集合添加元素 集合移除元素 集合统计.清空元素 集合元素获取(遍历) 集合之间的运算 集合差运算 - 集合并运算 | 集合交运算 & 集合异或运算 ^ 应用场景 普通for循环去重 利用集合简单去重 去重保持原来的顺序 总结 引言 set(集合)虽然用的很少,但它是一个无序的不重复元素序列,用来简单的去重挺快的. 集合的定义 set(集合) 与列表类似,不同之处在于集合的 元素不重复 集合和字典一样也是用 {} 定义,但元素之间使用 , 分隔,或者使用 se

  • Python pandas常用函数详解

    本文研究的主要是pandas常用函数,具体介绍如下. 1 import语句 import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime import re 2 文件读取 df = pd.read_csv(path='file.csv') 参数:header=None 用默认列名,0,1,2,3... names=['A', 'B', 'C'...] 自定义列名 index_col='

  • python 回溯法模板详解

    什么是回溯法 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为"回溯点". 无重复元素全排列问题 给定一个所有元素都不同的list,要求返回list元素的全排列. 设n = len(list),那么这个问题可以考虑为n叉树,对这个树进行dfs,这个问题里的回溯点就是深度(也就是templist的长度)为n时,回

  • 基于python 取余问题(%)详解

    取余的公式: 余数=除数-被除数*商 python的的余数是按照整除(向下取整)得到的商来计算的. 取余问题主要分为 : 正数与正数,负数与负数,正数与负数 ,0 正数与正数 #大数/小数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*商)即可. print(9//7) #1 print(9%7) #2 #小数/大数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*商)即可. #这里也可以说:只要正数与正数是小数/大数 的,商都是0 ,所以余数是

  • Python基础之数据结构详解

    一.列表 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来 示例: list01 = ['a','b','c'] 1.1 列表更新元素 一个列表是可以储存不同的类型的数据结构,并且修改的新元素也不一定需要和原来的元素类型一致,但是要注意的是,更新列表的索引必须是已存在的索引,不能对超出列表的索引更新元素 1.2 列表增加元素 增加元素的方法: 1.append方法:在列表的最后增加一个元素. list01 = ['a', 'b', 'c'] list01 .append('d') pr

  • Python 变量类型实例详解

    目录 1.变量赋值 2.多个变量赋值 3.标准数据类型 4.Python 数字 5.Python字符串 6.Python列表 7.ython 元组 8..Python 字典 9.Python数据类型转换 前言: 变量存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 1.变量赋值 Python 中的变量赋值不需要类型声明. 每个变量在内

  • 使用Python进行数独求解详解(二)

    目录 1.引言 2.前文回顾 3.减少非比要的迭代次数 3.1生成候选值字典 3.2生成候选值列表 3.3函数调用 4.总结 1. 引言 本文是数独游戏问题求解的第二篇,在前文中我们使用回溯算法实现了最简单版本的数独游戏求解方案.本文主要在前文解决方案的基础上,来思考如何通过改进来提升数独问题求解算法的性能. 闲话少说,我们直接开始吧. :) 2. 前文回顾 我们首先来回顾下前文的回溯算法,如下图示: 在前文中,我们引入了回溯算法来对数独问题求解,通过迭代每个子单元格cell的所有可能取值来暴力

  • python库h5py入门详解

    目录 h5py简单介绍 1.创建一个h5py文件 2.创建dataset数据集 3.创建group组 本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,作者刚接触h5py,完全靠看文档自学,如果哪里说的不对,欢迎纠正!如果读者需要进一步详细的学习h5py的更多知识,请参考h5py的官方文档. h5py简单介绍 h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多.group是像文件夹一样

  • Python数据结构之栈详解

    目录 0.学习目标 1.栈的基本概念 1.1栈的基本概念 1.2栈抽象数据类型 1.3栈的应用场景 2.栈的实现 2.1顺序栈的实现 2.1.1栈的初始化 2.2链栈的实现 2.3栈的不同实现对比 3.栈应用 3.1顺序栈的应用 3.2链栈的应用 3.3利用栈基本操作实现复杂算法 0. 学习目标 栈和队列是在程序设计中常见的数据类型,从数据结构的角度来讲,栈和队列也是线性表,是操作受限的线性表,它们的基本操作是线性表操作的子集,但从数据类型的角度来讲,它们与线性表又有着巨大的不同.本节将首先介绍

  • Python 分形算法代码详解

    目录 1. 前言 什么是分形算法? 2. 分形算法 2.1 科赫雪花 2.2 康托三分集 2.3 谢尔宾斯基三角形 2.4 分形树 3. 总结 1. 前言 分形几何是几何数学中的一个分支,也称大自然几何学,由著名数学家本华曼德勃罗( 法语:BenoitB.Mandelbrot)在 1975 年构思和发展出来的一种新的几何学. 分形几何是对大自然中微观与宏观和谐统一之美的发现,分形几何最大的特点: 整体与局部的相似性: 一个完整的图形是由诸多相似的微图形组成,而整体图形又是微图形的放大. 局部是整

随机推荐