一道python面试的一个小问题,说怎么使用一行代码将一个列表里的重复元素,其实这里只要将列表转换成集合就可以了。

定义

集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

    1. 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存
    1. 天生去重,在集合里没办法存重复的元素
    1. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

基于上面的特性,我们可以用集合来干2件事,去重和关系运算

 li=[1,1,'li']
a=set(li) # 可变集合/‘
print(a)
b=set('xiaohu 123')
print(b) # set是无序不重复的 # 如果要取值 1、for循环 2、迭代器

集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
集合当中的交(
1、 & 2、集合中的方法intersection()),并(1、 | 2、 集合中的方法union(),补(1、- 2、集合中的方法difference()),差(集合中的方法symmetric_difference()
 pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']
linuxs=['wupeiqi','oldboy','gangdan'] # 求既报名python,也报名linux的学生 ,这是用for循环实现两个集合的交集-----------------------------------------------------
l=[]
for item in pythons:
if item in linuxs:
l.append(item)
print(l) # 求报名了python,没有报名linux的学生-----------------------------------------------------------------------------------
l=[]
for item in pythons:
if item not in linuxs:
l.append(item)
print(l) # 求所有报名的孩子的集合 1、 | 2、 集合中的方法union()----------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
s=a | b # 求两个集合的并集
print(s)
print(a.union(b)) # 和 | 效果一样,求两个集合的并集 # 求两个集合的交集 1、 & 2、集合中的方法intersection()----------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
s= a & b
print(s)
print(a.intersection(b)) # 求补集----------------------------------------------------------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
print(a-b) # {'biubiu', 'yuanhao', 'egon', 'alex'}
print(a.difference(b)) # {'biubiu', 'yuanhao', 'egon', 'alex'}
print(b-a) # {'oldboy'}
print(b.difference(a)) # {'oldboy'} # 求没有同时报名python和linuxs的学生------------------------------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
print(a^b)
print(a.symmetric_difference(b)) # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
print(b.symmetric_difference(a)) # {'oldboy', 'biubiu', 'yuanhao', 'egon', 'alex'}

 集合中  >,>=,<,<= 父集,子集 (返回布尔值)

 set1={1,2,3,4,5}
set2={1,2,3,4} print(set1 >= set2) print(set1.issuperset(set2)) # 完全包含的意思 print(set2 <= set1) print(set2.issubset(set1)) # 子集

集合里的增与删

1、add()方法

 set1.add(88)  # 88是一个整体
print(set1)
print(set1.pop())
print(set1)

  2、discard(),remove()方法

 set1.discard(3) # 指定值删除
print(set1)
set1.remove(2) # 也是指定值删除
print(set1)
3、update()方法
 set1.update('ops')  # 与add的区别是添加几个不重复的
set1.update([123,'ooo'])
print(set1)
4、clear()方法
 set1.update('ops')  # 与add的区别是添加几个不重复的
set1.update([123,'ooo'])
print(set1)
在集合中添加元素用.add()方法,.pop方法不指定参数,随机删除,并且有返回值
单纯的删除:discard,remove 指定元素删除,元素不存在不报错,单纯的删除,没有返回值
update方法谁调用更新谁的集合
print(set('alex')==set('alexexex')) # 返回True
print(set('alex')<set('alexwwww')) # 返回True 因为右边包含左边

  

 
 

Python基本数据结构之集合的更多相关文章

  1. Python之数据结构:集合

    一.set集合 1.集合是一个无序不重复元素集,有去重的作用 set集合类需要的参数必须是迭代器类型的,如:序列.字典等,然后转换成无序不重复的元素集.由于集合是不重复的,所以可以对字符串.列表.元组 ...

  2. Python常见数据结构-Set集合

    集合基本特点 集合是无序的,且集合内无重复值. 集合不支持索引和切片 集合常见操作及方法 s1 = {1,2,3} s2 = {2,3,4} s1.add(4) #.add()方法添加一个元素 s1. ...

  3. 小白学 Python(15):基础数据结构(集合)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. Clojure学习03:数据结构(集合)

    Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  & ...

  5. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  6. python的数据结构分类,以及数字的处理函数,类型判断

    python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...

  7. Python 基本数据结构

    Python基本数据结构 数据结构:通俗点儿说,就是存储数据的容器.这里主要介绍Python的4种基本数据结构:列表.元组.字典.集合: 格式如下: 列表:list = [val1, val2, va ...

  8. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

  9. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

随机推荐

  1. idea破解版安装、配置jdk以及建立一个简单的maven工程

    idea破解版安装.配置jdk,配置jdk环境变量以及建立一个简单的maven工程 一.idea破解版以及配置文件下载 下载网址:https://pan.baidu.com/s/1yojA51X1RU ...

  2. Integer类型与int的==比较

    前言 Java中有两种类型 基本类型 基本数据类类型存的是数值本身 引用类型 引用类型变量在内存放的是数据的引用 基本类型通过==比较的是他们的值大小,而引用类型比较的是他们的引用地址 正文 在一些特 ...

  3. windows显示文件后缀名

    win+E 进入到计算机 点击组织 点击文件夹和搜索选项 先点击查看,然后去掉勾选隐藏已知文件类型的扩展名

  4. 攻防世界(XCTF)逆向部分write up(一)

    晚上做几个简单的ctf逆向睡的更好 logmein elf文件 ida看看main函数伪代码 void __fastcall __noreturn main(__int64 a1, char **a2 ...

  5. Web渗透之mssql LOG备份getshell

    log备份的总结 当SQL注入是得到DB权限时候,接下来可以做的工作很多,象找管理员密码,后台管理这些都可以帮助你拿到WEBSHELL,但是这篇文章讲的是log备份,LOG备份出来的小马的体积小,而且 ...

  6. 初识域渗透利器Empire

    Empire 是一款类似Metasploit 的渗透测试框架,基于python 编写,Empire是一个纯粹的PowerShell 后开发代理,建立在密码安全通信和灵活的架构上.Empire 实现了无 ...

  7. Unity - Raycast 射线检测

    本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...

  8. 关于vue使用的一些小经验

    这一年来说,vue的势头很猛,用户量“噌”“噌”“噌”的涨 为了不掉队不落伍.在后台大哥的胁迫下,不得不选择用了它 刚开始很难接受vue的写法,在编辑器里很容易报错,基本上每行都会出现红色的波浪线 这 ...

  9. 21.Linux系统服务之大坑

    1.CentOS6启动流程 2.CentOS7启动流程 3.C6和C7的区别 4.运行级别C6&C7 0 关机 1 单用户模式 (超级权限 必须面对实体硬件) 2 暂未使用 3 字符界面(黑框 ...

  10. C语言1作业004

    这个作业属于哪个课程 C语言作业004 我在这个课程的目标是 理解和掌握for语句的基本操作 这个作业在哪个具体方面帮助我实现目标 循环结构的应用,数学函数基本问题 参考文献 C语言程序设计(第3版) ...