一道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. ORM查询总结版

    目录 概要 ORM常用字段 ORM基础 自定义一个插入类型,即固定长度 创建类终极版 多对多关系表创建 常用几个代码 参数 ORM与数据库代码对应的关系 外键使用分表很麻烦,要先删除主表后,再删除 不 ...

  2. 乱七八糟的学习资料汇总(python3.x,pyqt,svn,git)

    入门涉猎资料: python3.6.3中文文档:https://www.runoob.com/manual/pythontutorial3/docs/html/interpreter.html pyt ...

  3. 【NOIP2015】子串

    题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问 ...

  4. badboy录制脚本

    第一步:介绍badboy工具 1.1: 页面功能分析: 1. 界面视图,模拟浏览器,能够进行操作 2. 需要录制脚本的URL 3. 点击运行URL 4. Summary:运行的各指标,响应时间,成功事 ...

  5. 【javascript 伪协议】小结

    [javascript 伪协议] 将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中.这个特殊的协议类型声明了URL的主体是任意的javascrip ...

  6. 富文本编辑器(wangEditor)

    近期在产品的开发工作中遇到要使用富文本编辑器的地方.于是对比了几款编辑器, 最后选择了wangEditor. 优点:轻量.简洁.界面美观.文档齐全.   缺点: 相较于百度ueditor等编辑器功能较 ...

  7. 向net core 3.0进击——项目发布与部署

    目录 前言 发布 测试 小结 前言 在经历过好多折腾后,总算是把部署走通了一遍,之前只是简单创建个工程在linux下部署,后来一直将这件事搁置,直到最近刚好团队入手一个小服务器,很显然是linux的, ...

  8. git 拉取指定的远程分支(三种方式)

    直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...

  9. 解决错误 系统找不到指定的批标签 make_command_arguments |hadoop windows出错

    问题:cmd命令行传参数出错 此文章 适用于 cmd命令行传参数出错 在windows 7下倒腾 Hadoop 时出现 The system cannot find the batch label s ...

  10. ThreadLocal小试牛刀

    ThreadLocal中保存的数据只能被当前线程私有,不被其它线程可见 证明 声明一个全局的变量threadLocal,初始值为1,通过3个线程对其进行访问修改设置,理论上threadLocal的最终 ...