Python学习---Python下[set集合]的学习
Set集合[可变]是一个无序的,不重复的数据组合,它的主要作用如下:
1. 去重,把一个列表变成集合,就自动去重了
2. 关系测试,测试两组数据之前的交集、差集、并集等关系
集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
集合分类:可变集合、不可变集合
可变集合(set):可添加和删除元素,非可哈希的[但是要求自己的元素是可Hash的],不能用作字典的键,也不能做其他集合的元素
不可变集合(frozenset):与上面恰恰相反
创建结合:
利用set()/ frozenset()创建,且元素必须是不可变的,利用大括号{}输出包装
# 错误的创建
s = set('a', 1, 'b')
print(s) # TypeError: set expected at most 1 arguments, got 3 li = [1, 2, 'a', 'b']
s = set(li) # 列表变为集合
print(s) # {1, 2, 'a', 'b'} li2 = [1, 2, 1, 'a', 'a']
s = set(li2)
print(s) # 去重后: {1, 2, 'a'} li = [[1, 2,], 'a', 'b']
s = set(li) # 报错,TypeError: unhashable type: 'list' # set
s1 = set('hello')
print(s1) # {'h', 'l', 'o', 'e'}
# frozenset
s2 = frozenset('hhh')
print(s2) # frozenset({'h'})
访问集合
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
s1 = set('hello world')
print('a' in s1)       # True
print('b' in s1)       # False
# s1[1]  #TypeError: 'set' object does not support indexing
# 循环迭代无序输出
for i in s1:
    print(i, end='\t')   # e w o r d l h
# 直接输出
print(s1)    # {'h', 'w', 'r', 'l', 'o', 'd', 'e', ' '} 输入里面有空格,输出也有空格
更新集合
s.add() :元素作为一个整体添加进去
s.update(): 必须添加的是一个序列,列表[可以理解为添加,但是是一个字符一个字符序列化的添加]
s.remove():删除掉某一个元素
s.pop():删除任何一个元素,因为set集合是无序的,删除的随机性
s.clear(): 清空set里面的值
del set(): 删除set集合
s1 = set('apple')
print("原始set集合  :", s1)
s1.add('samsung')
print("add后的set   : ", s1)
s1.update('huawei')
print("update后的set:", s1)
s1.remove('a')           # 因为添加的是序列后的单个字符,所以不能直接输入
print("remove后的set:", s1)
s1.pop()
print("pop后的set   :", s1)
s1.clear()
print("clear后的set :", s1)
del s1
# print("del后的set   :", s1)  # 报错 NameError: name 's1' is not defined

集合类型操作符
1 in ,not in
2 集合等价与不等价(==, !=)
3 子集、超集4 联合(|)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()
子集和超集: 父集必须多于子集和一个字符
S1是S0的父集合: s1.issuperset(s0) ==> s1 > s0
S0是S1的子集合: s0.issubset(s1) ==> s0 < s1
s1 = set('applesamsung')
s0 = set('apple')
print("原始set集合[s0]   :", s0)
print("原始set集合[s1]   :", s1)
print('s1是s0的父集合    :', s1 > s0)   # 父集必须多于子集和一个字符
print('s1是s0的issuperset:', s1.issuperset(s0))   # 父集必须多于子集和一个字符
print('s0是s1的父集合    :', s0 < s1)   # 父集必须多于子集和一个字符
print('s0是s1的issubset  :', s0.issubset(s1))   # 父集必须多于子集和一个字符

交集: s0.intersection(s1) ==> s0 & s1
并集: s0.union(s1) ==> s0 | s1
差集: s0.difference(s1) ==> s0 - s1 【以S0为基础进行对比,in s0 not in s1】
对称差集: s0.symmetric_difference(s1) ==> s0 ^ s1
s0 = set([1, 2, 3, 4, 5])
s1 = set([4, 5, 6, 7, 8])
print("原始set:s0:", s0)
print("原始set:s1:", s1)
print("【交集】and :", s0.intersection(s1)) # 取出交集
print("【交集】s0&s1:", s0&s1) # 取出交集
print("【并集】 :", s0.union(s1)) # 取出并集
print("【并集】s0|s1:",s0 | s1) # 取出并集
print("【S0差集】 :", s0.difference(s1)) # 以S0为主, in S0 not in S1
print("【差集】s0-s1:", s0-s1) # 以S0为主, in S0 not in S1
print("【S1差集】 :", s1.difference(s0)) # 以S1为主, in S1 not in S0
print("【差集】s1-s0:", s1-s0) # 以S0为主, in S0 not in S1
print("【对称差集】 :", s1.symmetric_difference(s0)) # 除了公共的元素以外的元素
print("【对称差集】s0 ^s1:", s1 ^ s0 ) # 除了公共的元素以外的元素

set集合应用:最简单的去重
'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis)) #[1, 2, 3, 4]
Python学习---Python下[set集合]的学习的更多相关文章
- python学习,day3:集合的学习
		集合天生去重,另外集合非常便于两组数字的取交集,并集等计算 # coding=utf-8 # Author: RyAn Bi list_1 =[1,2,3,4,5,6,7] list_1 =set(l ... 
- Java基础学习篇---------String、集合的学习
		一.String常用的方法: 1. == 实质比较两个对象的地址数值 String a = "hello" (hello为匿名对象) String a1 = "hell ... 
- 【Java EE 学习 49 下】【Spring学习第一天】【MVC】【注解回顾】
		一.MVC 1.使用Spring有一个非常大的好处,那就是能够实现完全面向接口编程,传统的使用Dao.Service并不能实现完全的面向接口编程. 2.示例:https://github.com/kd ... 
- python学习博客地址集合。。。
		python学习博客地址集合... 老师讲课博客目录 http://www.bootcdn.cn/bootstrap/ bootstrap cdn在线地址 http://www.cnblogs. ... 
- Python学习---Python下[元组]的学习
		元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ... 
- “笨方法”学习Python笔记(1)-Windows下的准备
		Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ... 
- Python操作redis学习系列之(集合)set,redis set详解 (六)
		# -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ... 
- 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
		机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我们讨论过为什么通用人工智能领域即将要爆发.有兴趣入坑ML的小伙伴不要拖延了,时不我待! 在 ... 
- 《转》python学习--基础下
		转自http://www.cnblogs.com/BeginMan/archive/2013/04/12/3016323.html 一.数字 在看<Python 核心编程>的时候,我就有点 ... 
随机推荐
- 爬虫--requeste
			1.requeste模块,是我们Python对我们爬虫有好的一面,,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位.没有的话直接pip3 install ... 
- 我的Python升级打怪之路【六】:面向对象(二)
			面向对象的一些相关知识点 一.isinstance(obj,cls) 检查实例obj是否是类cls的对象 class Foo(object): pass obj = Foo() isinstance( ... 
- Robot Framework_Ride(Edit标签)
			前言 RIDE 作为 Robot Framework 的“脸面”,虽然我们已经可以拿它来创建和运行测试了,但我们对它的认识并不全面,这一小节我们将了解这个工具的使用 Edit标签 下面我们来看一看测试 ... 
- 【转】selenium自动化测试用例需要关注的几点(一)
			自动化测试设计简介 注:参看文章地址 我们在本章提供的信息,对自动化测试领域的新人和经验丰富的老手都是有用的.本篇中描述最常见的自动化测试类型, 还描述了可以增强您的自动化测试套件可维护性和扩展性的 ... 
- mongodb3.4 远程连接认证失败
			mongodb开启或者关闭授权功能时还是挺麻烦的,需要新建服务键入mongod --auth.为了方便,我这里是建了两个服务,用到哪个就切换至哪个服务. --需要授权 mongod --logpath ... 
- 九度oj 1437 To Fill or Not to Fill 2012年浙江大学计算机及软件工程研究生机试真题
			题目1437:To Fill or Not to Fill 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1488 解决:345 题目描述: With highways availabl ... 
- Java web验证码
			绘制验证码的主要步骤: 1,设置宽度高度,验证码个数,干扰线个数,可选字符,背景颜色,字体格式 2,画干扰线,随机生成颜色,字体,字符 3,设置缓冲区,得到画笔,设置边框,读写数据,存储图片. 1,S ... 
- jenkins启动脚本
			[root@localhost system]# cat /etc/init.d/jenkins #!/bin/sh # # SUSE system statup script for Jenkins ... 
- solr不是标准的java project解决方案
			官方默认提供的源码包并不是一个标准的Eclipse Java - Project,需要使用ivy进行构建,通过ivy的构建可以将下载下来的源码包转换成一个标准的java Project,然后我们就能把 ... 
- WeUI logo专为微信设计的 UI 库 WeUI
			http://www.oschina.net/p/weui?fromerr=FnwHyWAb http://weui.github.io/weui/ 
