python 基础学习 集合

        Python中的集合分为可变集合和不可变集合,顾名思义,可变集合可以进行添加、删除和更新等操作,而不可变集合是不能进行这些操作的。除此之外,两者更大的区别在于:可变集合的元素时不可哈希的,而不可变集合的元素是可哈希的,这久意味着不可变集合的元素可以作为字典的键值,相反,可变集合不允许。和数学上的集合一样,集合具有无序性和不可重复性,也具有并集,交集,差集等操作。

        和列表,元组和字典不同,集合没有特别的语法格式。Python提供了set()和frozenset()两方法创建集合对象,其中set()创建一个可变集合,frozenset()创建一个不可变集合,参数为空是创建空对象,当为一个可迭代对象时,创建一个初始化了的集合。

>>> # python 基础学习 集合
>>> # 创建集合对象
>>> # 可变集合
>>> set1 = set('python set')
>>> set1
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'y'])
>>> type(set1)
<type 'set'>
>>> # 不可变集合
>>> set2 = frozenset('python frozenset')
>>> set2
frozenset([' ', 'e', 'f', 'h', 'o', 'n', 'p', 's', 'r', 't', 'y', 'z'])
>>> type(set2)
<type 'frozenset'>

        注意,因为字符串本身就是一个可迭代对象,所以要想创建一个以字符串为元素的集合,就必须把字符串作为列表或元组的元素,然后把该列表或者元组作为参数来创建集合。

>>> # 以字符串作为元素的集合
>>> set3 = set(['python','java','android'])
>>> set3
set(['python', 'android', 'java'])

        由于集合具有无序性,所以不能定向访问集合中的某个元素,而只能判断某个元素是否存在于集合中。

>>> # 集合成员关系
>>> 'y' in set1
True
>>> 'f' not in set1
True
>>> 'python' in set3
True

        对于可变集合来说,可以添加和删除元素,而添加不是使集合具有重复的元素,也不能定向的删除某个元素,只能删除一个不可预知(集合的无序性)的元素。对于不可变元素来说,任何试图改变集合的值的操作都是不允许的。

>>> # 可变集合添加和删除元素
>>> set3.add('mysql')
>>> set3
set(['python', 'android', 'java', 'mysql'])
>>> # 可变集合添加和删除元素
>>> # 添加新元素
>>> set3.add('mysql')
>>> set3
set(['python', 'android', 'java', 'mysql'])
>>> # 添加已有元素
>>> set3.add('python') #只有一个'python' 对象
>>> set3
set(['python', 'android', 'java', 'mysql'])
>>> # 删除集合元素
>>> set3.pop()
'python'
>>> set3.pop()
'android'
>>> set3.pop()
'java'
>>> set3
set(['mysql'])

        集合操作

        子集(<,<=):一个集合中的所有元素都是另一个集合中的元素,操作符对应的内建函数:s.issubset(t)

>>> # 子集
>>> set1 = set('python set')
>>> set2 = frozenset('python frozenset')
>>> set4 = set('set')
>>> set4 < set1
True
>>> set4 < set2

        并集(|):返回一个新的集合,该集合中的元素至少是任意一个集合中的元素,对应的内建函数: s.union(t)

>>> #并集
>>> set1 | set2
set([' ', 'e', 'f', 'h', 'o', 'n', 'p', 's', 'r', 't', 'y', 'z'])
>>> set1 | set3
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'mysql', 'y'])
>>> set1.union(set3)
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'mysql', 'y'])

        交集(&):返回一个新集合,该集合中的元素同时是两个集合中的元素,对应的内建函数:s.intersection(t)

>>> # 交集
>>> set1 & set2
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'y'])
>>> set1 & set3
set([])
>>> set1.intersection(set2)
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'y'])

         差集(-):差集(s-t),返回一个新的集合,该集合中的元素只属于s但不属于t,对应的内建函数:s.difference(t)

>>> # 差集
>>> set1 - set2
set([])
>>> set1 - set3
set([' ', 'e', 'h', 'o', 'n', 'p', 's', 't', 'y'])
>>> set2 - set1
frozenset(['r', 'z', 'f'])

        需要指出的是,不可变集合同样允许并集、交集、差集等操作,在上面的小例子中,set2就是一个不可变集合。当两种集合混合操作时,结果会是怎么样的呢?其依据一个原则:与第一个操作数的类型为准,即如果第一个操作数的类型是不可变的,返回的结果就是不可变的,反之就是可变的。

>>> type(set1-set2)
<type 'set'>
>>> type(set2-set1)
<type 'frozenset'>

 

        美好的一天,或者,明天……












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值