Python 集合1

原创 2016年05月30日 23:19:28
集合(1)


回顾一下已经学过的数据类型:int/str/bool/list/dict/tuple


英文是set,翻译过来叫做“集合”。它的特点是:有的可变,有的不可变;元素无


次序,不可重复。






创建set
tuple算是list和str的杂合,那么set则可以堪称是list和dict的杂合。


set拥有类似dict的特点:可以用{}花括号来定义;启动的元素没有序列,也就是是


非序列类型的数据;而且,set中的元素不可重复,这就类似dict的键。
set也有一点list的特点:有一种集合可以原处修改。


>>> s1 = set("qiwsir")
>>> s1
set(['q','i','s','r','w'])
把str中的字符拆解开,形成set。特别注意观察:qiwsir中有两个i,但是在s1中,


只有一个i,也就是集合中元素不能重复。


>>> s2 = set([123, "google", "face", "book", "facebook", "book"])
>>> s2
set(['facebook', 123, 'goole', 'book', 'face'])
在创建集合的时候,如果发现了重复的元素,就会过滤一下,剩下不重复的。而且


,从S2的创建可以看出,查看结果显示的元素顺序排列与开始建立是不同,完全是


随意显示的,这说明集合中的元素没有序列。


>>> s3 = {"facebook", 123}  #通过{}直接创建
>>> s3
set([123,'facebook'])
除了用set()来创建集合。还可以使用{}的方式,但是这种方式不提倡使用,因为


在某些情况下,python搞不清楚是字典还是集合。


>>> s3 = {"facebook",[1,2,'a'],{"name":"python","lang":"english"},123}
TypeError:unhashable type: 'dict'


>>> s3 = {"facebook", [1,2],123}
TypeError:unhashable type: 'list'
"unhashable",它的反义词是"hashable",很多时候翻译为“可哈希”,其实它由一


个不是音译的名词“散列”。某数据“不可哈希”(unhashable)就是其可变,如


list/dict,都能原地修改,就是unhashable。否则,不可变的,类似str那样不能原


地修改,就是hashable(可哈希)的。


对于前面已经提到的字典,其键必须是hashable数据,即不可变的。




>>> s1
set(['q','i','s','r','w'])
>>> s1[1] = "I"
TypeError: 'set' object does not support item assignment


>>> s1
set(['q','i','s','r','w'])
>>> lst = list(s1)
>>> lst
['q','i','s','r','w']
>>> lst[1] = "I"
>>> lst
['q','I','s','r','w']
分别用list()和set()能够实现两种数据类型之间的转化。


特别说明,利用set()建立起来的集合是可变集合,可变集合都是unhashable类型的





>>> a_set = {} 
>>> a_set.add("qiwsir")
AttributeError: 'dict' object has no attribute 'add'
>>> type(a_set)  
<type 'dict'>


特别说明一下,{}这个东西,在dict和set中都用。但是,如果上面的方法建立的是


dict,不是set。这里python规定的,要建立set,只能用前面介绍的方法了。


>>> a_set = {'a', 'i'}
>>> type(a_set)
  <type 'set'>


>>> a_set.add("qiwsir")
>>> a_set
set(['i', 'a', 'qiwsir'])


>>> b_set = set("python")
>>> type(b_set)
<type 'set'>
>>> b_set
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> b_set.add("qiwsir")
>>> b_set
set(['h', 'o', 'n', 'p', 't', 'qiwsir', 'y'])


>>> b_set.add([1,2,3]) #报错,list是不可哈希的,集合中的元素应该是


hashable类型。
TypeError:unhashable type:'list'


>>> b_set.add('[1,2,3]') #可以这样
>>> b_set
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'qiwsir', 'y'])




>>> help(set.update)
update(...)
    update a set with the union of itself and others.


>>> s1
set(['a', 'b'])
>>> s2
set(['github', 'qiwsir'])
>>> s1.update(s2)  #把s2的元素并入到s1中。
>>> s1             #s1的引用对象修改
set(['a', 'qiwsir', 'b', 'github'])
>>> s2
set(['github', 'qiwsir'])


>>> s2.update("goo")
>>> s2
set(['github', 'o', 'g', 'qiwsir'])
>>> s2.update((2,3))
>>> s2
set([2, 3, 'g', 'o', 'github', 'qiwsir'])




pop, remove, discard, clear
>>> help(set.pop)
pop(...)
    Remove and return an arbitrary set element.
    Raises keyError if the set is empty.


>>> b_set
set(['[1,2,3]', 'h', '0', 'n', 'p', 't', 'qiwsir', 'y'])
>>> b_set.pop()  #从set中任意选一个删除,并返回该值
'[1,2,3]'
>>> b_set.pop()
'h'
>>> b_set.pop()
'o'
>>> b_set
set(['n', 'p', 't', 'qiwsir', 'y'])


>>> b_set.pop("n")  #如果要指定删除某个元素,报错了
TypeError: pop() takes no arguments (1 given)
pop()不能有参数。




set.remove(obj)中的obj,必须是set中的元素,否则就报错。


>>> a_set
set(['i', 'a', 'qiwsir'])
>>> a_set.remove("i")
>>> a_set
set(['a', 'qiwsir'])
>>> a_set.remove("w")
keyError: 'w'




跟remove(obj)类似的还有一个discard(obj):


discard(obj)中的obj如果是set中的元素,就删除,如果不是就什么也不做。


>>> a_set.discard('a')
>>> a_set
set(['qiwsir'])
>>> a_set.discard('b')
>>>


在删除上还有一个绝杀,就是set.clear(),它的功能是:


>>> a_set
set(['qiwsir'])
>>> a_set.clear()
>>> a_set
set([])
>>> bool(a_set)
False

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python 的学习资料集合(1)

  • 2011年07月13日 23:23
  • 7.6MB
  • 下载

python学习-1-列表,元组,字典,集合,文件操作

1. 列表、元组操作 names = ['Alex',"Tenglan",'Eric'] >>> names[0] >>> names[2] >>> names[-1] >>> names...

python-1-如果在列表,字典在,集合中根据条件筛选数据?

通用做法:迭代+判断data = [1,5,6,-2,-6,0,9] res=[] for x in data: if x >= 0: res.append(x) print(...

python-2-1 如何在列表, 字典, 集合中根据条件筛选数据-列表解析-filter

-- coding: utf-8 --”’ 2-1 如何在列表, 字典, 集合中根据条件筛选数据预备知识: 本节中我们会用到randint,lambda,timeit,filter等关键字 通常...

(python学习笔记)1 元组、集合、字典

元组 tuple 定义:t = () t = (1,2,3,4,'aaa',[1,2,3]) 支持下标、切片操作 元组是不可变对象,不可以对元组的内容做修改,但是元组中的有列表的话可以修改列表的内...

Python密码学编程.part1

  • 2017年11月11日 20:45
  • 150MB
  • 下载

游戏服务器之长连接服务器(python)(1)

游戏服务器之长连接服务器实现tcp连接的数据异步收发。 特点如下: (1)一个服务器进程含一个服务器对象 (2)服务器对象包含被动连接工厂和主动连接工厂 (3)两个工厂分别处理被动连接和主动连接 (4...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python 集合1
举报原因:
原因补充:

(最多只允许输入30个字)