Python基本数据结构之集合
一道python面试的一个小问题,说怎么使用一行代码将一个列表里的重复元素,其实这里只要将列表转换成集合就可以了。
定义
集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,
- 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存
- 天生去重,在集合里没办法存重复的元素
- 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{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基本数据结构之集合的更多相关文章
- Python之数据结构:集合
一.set集合 1.集合是一个无序不重复元素集,有去重的作用 set集合类需要的参数必须是迭代器类型的,如:序列.字典等,然后转换成无序不重复的元素集.由于集合是不重复的,所以可以对字符串.列表.元组 ...
- Python常见数据结构-Set集合
集合基本特点 集合是无序的,且集合内无重复值. 集合不支持索引和切片 集合常见操作及方法 s1 = {1,2,3} s2 = {2,3,4} s1.add(4) #.add()方法添加一个元素 s1. ...
- 小白学 Python(15):基础数据结构(集合)(下)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- Clojure学习03:数据结构(集合)
Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2 3 5] , ["ad" "adas" & ...
- (python数据分析)第03章 Python的数据结构、函数和文件
本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...
- python的数据结构分类,以及数字的处理函数,类型判断
python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...
- Python 基本数据结构
Python基本数据结构 数据结构:通俗点儿说,就是存储数据的容器.这里主要介绍Python的4种基本数据结构:列表.元组.字典.集合: 格式如下: 列表:list = [val1, val2, va ...
- 转 Python常见数据结构整理
http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
随机推荐
- 【TencentOS tiny】深度源码分析(4)——消息队列
消息队列 在前一篇文章中[TencentOS tiny学习]源码分析(3)--队列 我们描述了TencentOS tiny的队列实现,同时也点出了TencentOS tiny的队列是依赖于消息队列的, ...
- 一次SSM项目记录
1.控制台输入 mvn archetype:generate -DgroupId=com.yjdev -DartifactId=myzone -DarchetypeArtifactId=maven-a ...
- JavaScript 编译器-Babel
Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.这意味着,你可以现在就用ES6.ES7编写程序,而不用担心现有环境是否支持. 一.全局安装babel工具 在保证n ...
- [BZOJ3813] 奇数国 - 线段树
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 912 Solved: 508[Submit][Status][Discuss] ...
- Ubuntu 16.04 集成安装Apache+PHP+Kerberos+LDAP+phpLDAPadmin
一.安装Apache 1.1.安装Apache apt-get update apt-get install apache2 过程如下: root@duke01:~# apt-get update命中 ...
- Python开发【第二篇】:初始Python
Python的前世今生 Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,中国人称他为龟叔,他在圣诞节期间在阿姆斯特丹为了打发时间,决定开发一个新的脚本 ...
- webpack 打包 todolist 应用
写在前面的话: 一直想着手动配置webpack实现应用,正好最近这段时间比较空闲,就写了一个通过webpack打包实现todolist的简单应用.本文内容包括:通过webpack打包css,html ...
- python编程系列---可迭代对象,迭代器和生成器详解
一.三者在代码上的特征 1.有__iter__方法的对象就是可迭代类(对象) 2.有__iter__方法,__next()方法的对象就是迭代器3.生成器 == 函数+yield 生成器属于迭代器, 迭 ...
- pycharm中debug的使用
1.未打断点运程序,输出全部结果 2.打断点后,点击debug,代码执行到断点前停止(断点所在行不执行) 3.step over,是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子 ...
- 17.Linux高可用之Keepalived
1.什么是高可用,为什么要设计高可用? 两台机器启动着相同的业务系统,当有一台机器宕机,另外一台服务器能快速的接管,对于访问的用户是无感知的. 减少系统不能提供服务的时间. 2.高可用使用什么工具来实 ...