一. 定义

set是一个无序且不重复的元素集合

set和dict类似,是一组key的集合,但不存储value

set有以下特性:

1. 由于key不能重复,所有set中没有重复的key

2. 元素为不可变对象(不能将可变类型字典或者列表作为元素)

二. 创建set

1. 直接使用{}创建新的set并初始化

  1. set1 = {1, 2, 3, (4, 5, 6), "good news"}

2. 使用set关键字来创建

  1. set2 = set([1, 2, 3]) #相当于set2 = {1, 2, 3}, set函数只能传入一个参数
  2. set3 = set((1,2,3))   #相当于set3 = {1,2,3}
  3. set4 = set({'a':1,'b':2,'c':3})  #相当于set4 = {'a','b','c'}

3. 创建空的set

如果要创建一个空的set,只能使用set()关键字,因为如果使用set1={}这种方式,那么set1会被声明为一个空的字典

三. 基本操作

1. 重复的操作在set中自动被过滤

  1. >>> s = set([1, 1, 2, 2, 3, 3])
  2. >>> s
  3. {1, 2, 3}

2. 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果

  1. >>> s = {1, 2, 3}
  2. >>> s.add(4)
  3. >>> s
  4. {1, 2, 3, 4}
  5. >>> s.add(4)
  6. >>> s
  7. {1, 2, 3, 4}

3. 通过 remove(key) 方法可以删除元素

  1. >>> s = {1, 2, 3, 4}
  2. >>> s.remove(4)
  3. >>> s
  4. {1, 2, 3}

4. 两个set可以做数学意义上的交集、并集等操作

  1. >>> s1 = set([1, 2, 3])
  2. >>> s2 = set([2, 3, 4])
  3. >>> s1 & s2
  4. {2, 3}
  5. >>> s1 | s2
  6. {1, 2, 3, 4}

四. 练习

给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序排列,N不存在取值非法的情况)

  1. a=[1,6,7,4,4,5,4,5,4,5,5,6,7,8,5,6,7,3,4,2,2,1,4,8,9,4,5,6]
  2.  
  3. def get_datas(a):
  4. result = []
  5. data_dict = {}
  6. #键值对:键——数字,值——在列表中的次数
  7. #set(a)将列表转化为set类型,并过滤掉其中重复的数字
  8. for item in set(a):
  9. data_dict[item] = a.count(item)
  10.  
  11. #将键值对按值(数字出现的次数)排序——从高到低排序
  12. #sorted为临时性排序,不会改变原列表data_dict的顺序
  13. res = sorted(data_dict.values(), reverse=True)
  14. for num in res:
  15. for key, value in data_dict.items():
  16. #key not in result能保证相同的数字只添加一次
  17. if num == value and key not in result:
  18. result.append(key)
  19. return result
  20.  
  21. result = get_datas(a)
  22. print(result)

运行结果

  1. [4, 5, 6, 7, 1, 2, 8, 3, 9]

参考文章

https://www.cnblogs.com/whatisfantasy/p/5956775.html

https://www.cnblogs.com/shijiusui/p/7748523.html

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143167793538255adf33371774853a0ef943280573f4d000

python中的set类型的更多相关文章

  1. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  2. Python 中的枚举类型~转

    Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...

  3. python中对象、类型和元类之间的关系

    在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...

  4. Python中的集合类型分类和集合类型操作符解析

    集合类型    数学上,把set称作由不同的元素组成的集合,集合(set)的成员通常被称作集合元素(set elements).    Python把这个概念引入到它的集合类型对象里.集合对象是一组无 ...

  5. Python中的鸭子类型

    今天,我们来聊一聊Python中的鸭子类型(duck typing). 编程语言具有类型概念,例如Python中有数字类型.字符串类型.布尔类型,或者更加复杂的结构,例如元组tuple.列表list. ...

  6. Python 中的鸭子类型和猴子补丁

    原文链接: Python 中的鸭子类型和猴子补丁 大家好,我是老王. Python 开发者可能都听说过鸭子类型和猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这 ...

  7. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  8. 顺序表的原理与python中的list类型

    数据是如何在内存中存储的? 在32位的计算机上,1个字节有8位,内存寻址的最小单位就是字节.假设我们有一个int类型的值,它从0x10开始,一个int占据4个字节,则其结束于0x13. 那么数据类型有 ...

  9. python中使用 C 类型的数组以及ctypes 的用法

    Python 在 ctypes 中为我们提供了类似C语言的数据类型, 它的用途(我理解的)可能是: (1) 与 其他语言(如 C.Delphi 等)写的动态连接库DLL 进行交换数据,因为 pytho ...

  10. Python中函数参数类型和参数绑定

    参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...

随机推荐

  1. IO流入门-第十章-DataInputStream_DataOutputStream

    DataInputStream和DataOutputStream基本用法和方法示例 /* java.io.DataOutputStream 数据字节输出流,带着类型写入 可以将内存中的“int i = ...

  2. (4.6)sql2008中的group by grouping sets

    最近遇到一个情况,需要在内网系统中出一个统计报表.需要根据不同条件使用多个group by语句.需要将所有聚合的数据进行UNION操作来完成不同维度的统计查看. 直到发现在SQL SERVER 200 ...

  3. CDN 环境下获取用户IP方法

    CDN 环境下获取用户IP方法 1 cdn 自定义header头的X-Real-IP,在后端使用$http_x_real_ip获得 proxy_set_header X-Real-IP $remote ...

  4. Python3.6写socket程序

    Python进行Socket程序编写使用的主要模块就是 socket 模块,在这个模块中可以找到 socket()函数,该函数用于创建套接字对象.套接字也有自己的方法集,这些方法可以实现基于套接字的网 ...

  5. Git学习笔记-完全版

    注意本文参考廖雪博客: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 一:Git ...

  6. day14生成器

    生成器 我自己想写个可迭代的,——生成器生成器的本质就是迭代器因此生成器的所有好处都和迭代器一样但是生成器是我们自己写的python代码生成器的实现有两种方式:1.生成器函数2.生成器表达式 def ...

  7. 按钮js跳转到非表单提交页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. kmp模板 && 扩展kmp模板

    kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...

  9. Hadoop创始人Doug Cutting寄语2017:五种让开源项目成功的方法

    原文链接:http://www.infoq.com/cn/news/2017/01/Hadoop-2017-5-open-source?utm_source=tuicool&utm_mediu ...

  10. MPU6050工作原理及STM32控制MPU6050

    源:MPU6050工作原理及STM32控制MPU6050 MPU6050 介绍