《转》python学习(10)-集合
转自 http://www.cnblogs.com/BeginMan/p/3160565.html
一、目录
1、集合概述
2、关于集合的操作符、关系符号
3、集合的一系列操作(添加、更新、访问、删除)
4、关于集合的内建函数、内建方法
5、小结
二、集合概述
集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
集合元素(set elements):组成集合的成员
1 >>> li=['a','b','c','a']
2 >>> se =set(li)
3 >>> se
4 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学习(10)-集合的更多相关文章
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
- python学习10字典
'''''''''字典(Dict)是python语言的一个最大的特征1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型2.表示:{} 列表:[] 元组 () 字符串 ‘’ “” ‘‘ ...
- Python学习--10 面向对象编程
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 本节对于面向对象的概念不做 ...
- python学习之集合
集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...
- Python学习五|集合、布尔、字符串的一些特点
#集合本身就像无值的字典 list1 = set([1,2,3,4]) list2 = {1,2,3,4} print('list1 == list2?:',list1==list2)#list1 = ...
- Python学习——set集合的补充
set 是一个无序且不重复的元素集合>>> num = {1,2,3,4,5} 1.add()添加一个元素 >>> num.add(6) >>> ...
- Python学习之==>集合
1.简介 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复数据的. 2.集合的作用 它可以把一个列表中重复的数据去掉,而不需要你再写判断 可以做关系测试,比 ...
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- Python学习-10.Python函数定义(二)
在Python中定义函数的时候,可以使用参数默认值的方式定义函数 例子: def welcome(who,state='is',action='talking'): print(who,state,a ...
- day5:python学习之集合
0. 集合的作用及特点 集合具有去重和关系测试两大作用,它具有无序的特点. list1 = [1,2,3,4,5,7,6,8,6,4] list1 = set(list1) print(list1) ...
随机推荐
- Java如何显示线程状态?
在Java编程中,如何显示线程状态? 以下示例演示如何使用Thread类的isAlive()和getStatus()方法显示线程的不同状态. package com.yiibai; class MyT ...
- linq join 左连接 leftjoin 多个on条件 where 条件
var haveChange = from newScore in newScoreList join oldScore in oldScoreList on new{newScore.ExamId, ...
- MySQL binlog日志操作详解
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...
- php判断文件存在是用file_exists 还是 is_file
From: http://www.php100.com/html/php/hanshu/2013/0905/4672.html [导读] 在写程序时发现在判断文件是否存在时,有两种写法,有的人用了is ...
- 视锥体(frustum)裁剪
原文地址:http://www.linuxgraphics.cn/graphics/opengl_view_frustum_culling.html 背景 视锥体(frustum),是指场景中摄像机的 ...
- linux(centos7)防火墙配置firewalld和iptables
linux系统中防火墙管理有2种方式,分别是iptables和firewalld(centos7.x),下面介绍centos7的配置方法 一.firewalld: 因为cenos7默认使用firewa ...
- Python自然语言处理学习——jieba分词
jieba——“结巴”中文分词是sunjunyi开发的一款Python中文分词组件,可以在Github上查看jieba项目. 要使用jieba中文分词,首先需要安装jieba中文分词,作者给出了如下的 ...
- CentOS6.5安装wine
全程只有两个命令: $ yum install epel-release $ yum install wine 关于epel-release,说白了就是一个第三方软件源. 企业版 Linux 附加软件 ...
- Android 下载zip压缩文件并解压
网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法. 其实也很简单,就是把下载文件和解压zip文件结合到一起.下面即代码: URLConne ...
- 小程序的tab切换事件
index.wxml代码 <view class="tab-left" > <view " bindtap="tab">tab ...