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中有序集合的索引遍历

有时候,我们需要拿到一个集合中某个元素的索引,对于有序集合来说,索引遍历有两种方式: 一、enumerate(l)函数:利用这个函数可以将有序集合变成一个含有N个tuple的list,每个tuple...
  • sunflower_csdn
  • sunflower_csdn
  • 2015年08月31日 19:26
  • 2050

python集合常用方法

一、列表 新建:list = [] 不要求内部元素类型相同 查、改:下标索引:list[0]、list[-1] 删:删除指定下标元素:del(list[1]) 删:删除并返回指定下标的元素: list...
  • u013573813
  • u013573813
  • 2016年12月17日 23:47
  • 5644

python集合set操作

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和...
  • B_H_L
  • B_H_L
  • 2013年09月12日 14:01
  • 4735

Python列表、元组、集合、字典的区别和相互转换

列表、元组、集合、字典的区别 列表 元组 集合 字典 英文 list tuple set dict 可否读写 读写 只读 读写 读写 可...
  • lilongsy
  • lilongsy
  • 2017年04月28日 11:40
  • 4436

Python中的集合类型(笔记)

>>> >>> s=set('cheeseshoi') >>> s set(['c', 'e', 'i', 'h', 'o', 's']) >>> >>> >>> t=frozenset(...
  • carolzhang8406
  • carolzhang8406
  • 2011年05月10日 21:33
  • 5474

python学习---元祖和集合

**元组:**1、特点:1、**有序**的集合 2、通过**偏移**来取数据 3、属于**不可变**的对象,**不能在原地(对象本身)修改**内容,没有排序,修改等操作。 4、形式:a=(1,2,3,...
  • tylglpc
  • tylglpc
  • 2015年12月11日 21:46
  • 730

python_笔记7_字符串截取(切片),有序集合,无序集合,迭代

在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。 >>> 'ABCDEFG'[:3] '...
  • ghostyusheng
  • ghostyusheng
  • 2016年04月25日 17:23
  • 1037

输出一个集合的幂集(所有子集)

问题描述:如一个抽象集合{1,2,3},它的所有子集包括{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}共2的n次方个,此问题又叫求集合的幂集。 一、递归实现   ...
  • zp_diandiandidi
  • zp_diandiandidi
  • 2017年03月18日 15:40
  • 506

Python中的集合操作

来自: 1、set与frozenset (1)当集合对象会被改变时(例如添加、删除元素等),只能使用set。 (2)一般来说使用fronzet的地方都可以使用set,除了以下两种情况: ...
  • fennvde007
  • fennvde007
  • 2014年07月03日 14:07
  • 1199

Python中的集合类型及其操作

本文介绍python中的集合类型以及其相关操作。 集合是一个无序的(字典也是无序的),不重复的数据集合。其基本功能包括下面两种: 1. 去重:把一个还有重复元素的列表或元组等数据类型转变成集合,其中的...
  • bbc955625132551
  • bbc955625132551
  • 2017年07月27日 10:34
  • 354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python 集合1
举报原因:
原因补充:

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