Python入门笔记(11):集合
一、目录
1、集合概述
2、关于集合的操作符、关系符号
3、集合的一系列操作(添加、更新、访问、删除)
4、关于集合的内建函数、内建方法
5、小结
二、集合概述
集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
集合元素(set elements):组成集合的成员
>>> li=['a','b','c','a'] >>> se =set(li) >>> se set(['a', 'c', 'b'])
集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
>>> li=[['a','b','c'],['a','c']]
>>> se = set(li)
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
se = set(li)
TypeError: list objects are unhashable
集合分类:可变集合、不可变集合
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素
不可变集合(frozenset):与上面恰恰相反
集合操作符与关系符号:(忘完了!)

三、集合的相关操作
1、创建集合
由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
>>> s = set('beginman')
>>> s
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> t = frozenset('pythonman')
>>> t
frozenset(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(s),type(t)
(<type 'set'>, <type 'frozenset'>)
>>> len(s),len(t)
(7, 8)
>>> s==t
False
>>> s=t
>>> s==t
True
>>>
2、访问集合
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
>>> 'a' in s
True
>>> 'z' in s
False
>>> for i in s:
print i
a
h
m
o
n
p
t
y
>>>
3、更新集合
可使用以下内建方法来更新:
s.add()
s.update()
s.remove()
注意只有可变集合才能更新:
>>> s.add(0)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
s.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
>>> type(s)
<type 'frozenset'>
>>> se = set(s)
>>> se
set(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(se)
<type 'set'>
>>> se.add(0)
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> se.update('MM')
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>> se.update('Django')
>>> se
set(['a', 0, 'D', 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>> se.remove('D')
>>> se
set(['a', 0, 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>>
del:删除集合本身
四、集合类型操作符
1、in ,not in
2、集合等价与不等价(==, !=)
3、子集、超集(见上表)
>>> set('shop')<set('cheeshop')
True
>>> set('bookshop')>=set('shop')
True
4、联合(|)
联合(union)操作与集合的OR操作其实等价的,联合符号有个等价的方法,union()。
>>> s1=set('begin')
>>> s2=set('man')
>>> s3=s1|s2
>>> s3
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> s1.union(s2) set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
但+ 运算则不适合:
>>> s3New = s1+s2
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
s3New = s1+s2
TypeError: unsupported operand type(s) for +: 'set' and 'set'
5、交集(&)
与集合AND等价,交集符号的等价方法是intersection()
>>> s1&s2 set(['n']) >>> s1.intersection(s2) set(['n'])
6、查补(-)
等价方法是difference()
>>> s1-s2 set(['i', 'b', 'e', 'g']) >>> s1.difference(s2) set(['i', 'b', 'e', 'g'])
7、对称差分(^)
对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()
>>> s1^s2 set(['a', 'b', 'e', 'g', 'i', 'm']) >>> s1.symmetric_difference(s2) set(['a', 'b', 'e', 'g', 'i', 'm'])
注意:集合之间and,or
>>> s1 and s2 set(['a', 'm', 'n']) #取 s2 >>> s1 or s2 set(['i', 'b', 'e', 'g', 'n']) #取 s1 >>>
五、集合、列表、元组、字符串之间转换
>>> list(s1)
['i', 'b', 'e', 'g', 'n']
>>> str(s1)
"set(['i', 'b', 'e', 'g', 'n'])"
>>> tuple(s1)
('i', 'b', 'e', 'g', 'n')
应用:
'''最简单的去重方式''' lis = [1,2,3,4,1,2,3,4] print list(set(lis)) #[1, 2, 3, 4]
六、关于集合的内建函数、内建方法
1、len():返回集合元素个数
2、set()、frozenset()工厂函数
3、所有集合方法:

4、仅适合可变集合


Python入门笔记(11):集合的更多相关文章
- python入门(11)条件判断和循环
python入门(11)条件判断和循环 条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: ag ...
- 大爽Python入门教程 1-1 简单的数学运算
大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...
- python学习笔记整理——集合 set
python学习整理笔记--集合 set 集合的用途:成员测试和消除重复的条目,进行集合运算 注意:花括号或set()函数可以用于创建集合. 注意:若要创建一个空的集合你必须使用set(),不能用{} ...
- Python入门笔记(13):列表解析
一.列表解析 列表解析来自函数式编程语言(haskell),语法如下: [expr for iter_var in iterable] [expr for iter_var in iterable i ...
- 【Python学习笔记】集合
概述 集合的一般操作 内建函数进行标准操作集合 数学运算符进行标准操作集合 集合的应用 概述 python的集合(set)是无序不重复元素集,是一种容器.集合(set)中的元素必须是不可变对象,即可用 ...
- python学习笔记(集合的使用)
集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知 ...
- python学习笔记11 ----线程、进程、协程
进程.线程.协程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进 ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- Python入门笔记(23):模块
一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用.实际的角度,模块往往对应Python程序文件. 每个文件都是一 ...
随机推荐
- javascript - 二叉树
都是些简单的东西,所以直接上代码了. /** * Created by huangjacky on 14-10-3. */ function Node(element, left, right) { ...
- Python: 如何继承str/string?
想搞一个对象继承自str,然后存一些额外信息用来标识这个字符串,然后理所当然地重写了__init__发现跪了: class newstring(str): def __init__(self, val ...
- Erwin 生成 mysql 带注释(comment )的脚本
Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment. 在百度无数次无法解决下,又FQ谷歌,在一个日 ...
- Visual Studio 新建项目报错" this template attempted to load component assembly 'NuGet.VisualStudio.Interop, ….".
"Error: this template attempted to load component assembly 'NuGet.VisualStudio.Interop, Version ...
- 三层架构与MVC & 设计模式的较量
刚刚学习了三层架构,并且正在实际应用中,但随着学习的深入,又了解到了一个叫MVC的东西,(早在设计模式中就听到过MVC,仅仅是简单查了一下什么意思.)如今正好把这三个东西放在一起聊聊. 三层 是一个分 ...
- Maven3路程(二)Eclipse集成Maven
我的环境: Eclipse:eclipse-jee-juno-SR2-win32 Maven:Maven3.0.5 1.Help->Eclipse Marketplace 2.选中要安装的插件, ...
- Xcode工程使用CocoaPods管理第三方库新建工程时出现错误
工程使用CocoaPods管理第三方库,在新的目录update版本的时候出现如下问题 问题1描述: diff: /../Podfile.lock: No such file or director ...
- SAP S4 Finance6个支持企业实时财务管理的主要创新领域
本文将讲述下 SAP Simple Finance里面6个支持企业实时财务管理的主要创新领域. Simple Finance 在以下几个方面具有自己独特的优势: ● 更加简洁的用户体验,可以让用户在任 ...
- fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! fast-framework 轻量级 Java Web 框架 – https://github. ...
- WebDriver基本API使用手册(基于Java和C#)
WebDriver基本API使用手册(基于Java和C#) http://www.docin.com/p-747728551.html