转自 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)-集合的更多相关文章

  1. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

  2. python学习10字典

    '''''''''字典(Dict)是python语言的一个最大的特征1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型2.表示:{} 列表:[] 元组 () 字符串 ‘’ “” ‘‘ ...

  3. Python学习--10 面向对象编程

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 本节对于面向对象的概念不做 ...

  4. python学习之集合

    集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典. 创建格 ...

  5. Python学习五|集合、布尔、字符串的一些特点

    #集合本身就像无值的字典 list1 = set([1,2,3,4]) list2 = {1,2,3,4} print('list1 == list2?:',list1==list2)#list1 = ...

  6. Python学习——set集合的补充

    set 是一个无序且不重复的元素集合>>> num = {1,2,3,4,5} 1.add()添加一个元素 >>> num.add(6) >>> ...

  7. Python学习之==>集合

    1.简介 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复数据的. 2.集合的作用 它可以把一个列表中重复的数据去掉,而不需要你再写判断 可以做关系测试,比 ...

  8. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  9. Python学习-10.Python函数定义(二)

    在Python中定义函数的时候,可以使用参数默认值的方式定义函数 例子: def welcome(who,state='is',action='talking'): print(who,state,a ...

  10. day5:python学习之集合

    0. 集合的作用及特点 集合具有去重和关系测试两大作用,它具有无序的特点. list1 = [1,2,3,4,5,7,6,8,6,4] list1 = set(list1) print(list1) ...

随机推荐

  1. InnoDB和MyISAM的区别与选择

    MyISAM 性能(适合小项目,读快速)MyISAM 是MySQL中默认的存储引擎,比如适合新闻系统,读为主.InnoDB 事务或外键支持(适合大项目,高并发读写)活跃用户20多万时候,也能很轻松应付 ...

  2. Java如何获得运行线程的优先级?

    在Java编程中,如何获得运行线程的优先级? 以下示例使用setPriority()方法打印正在运行的线程的优先级. package com.yiibai; public class GettingT ...

  3. 图形界面至少要有一个顶级Swing容器

    图形界面至少要有一个顶级Swing容器 顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持 常用的顶级容器: JFrame(框架):表示主程序窗口 JDialog(对话框):每个J ...

  4. c#中的对象生命周期

    无论是指类型的变量或是类类型的变量,其存储单元都是在栈中分配的,唯一不同的是类类型的变量实际上存储的是该类对象的指针,相当于vc6中的CType*,只是在.net平台的语言中将指针的概念屏蔽掉了.我们 ...

  5. tpshop添加后台菜单

    目前在后台公用函数文件function.php中getAllMenu方法里添加, 格式如下 array( 'system' => array('name'=>'系统设置','icon'=& ...

  6. C# 结构体 struct

    C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...

  7. 【ZooKeeper Notes】系列文章

    [ZooKeeper Notes]系列文章 https://my.oschina.net/xiaotian120/blog/194401

  8. SQLException: Column count doesn't match value count at row 1

    INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES('value1','value2'); 语句中,前后列数不等造成的 转自: ...

  9. C# ToString()格式设置大全

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  10. js设置随机切换背景图片

    <script> var imgs =["http://images.cnblogs.com/cnblogs_com/xiaobo-Linux/1112236/o_2.jpg&q ...