其他的数字类型——sets——在python 3系列和2.7中的set字面量 | 第二部分 类型与操作 —— 第 5 章: 数字类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载

未匹配的标注

如果你认为set 很“酷”,它们最终明显变得更酷了,因为它们有了set 字面量comprehensions的新语法,一开始只被增添在python 3系列中,但应广大用户的需求逆向移植到python 2.7中。在这些python中,仍可以使用内置的set函数来创建set对象,但还可以用一个新的set字面量形式(使用之前为字典保留的花括号)。在3系列和2.7中,下面代码是等价的:

set([1, 2, 3, 4]) # 内置函数调用(所有版本)
{1, 2, 3, 4} # 新的set字面量(2.7,3.x)

考虑到set本质上像无值字典,这个语法是合理的——因为set的项是无序的,唯一的且不可变的,这些项表现得很像字典的键。考虑到在3系列中的字典键列表是视图对象(它支持类set的行为如交集和并集,参见第8章获取关于字典视图对象的更多信息),这个操作上的相似性甚至更加引入注目。

不管set是如何创建的,3系列使用新的字面量格式来显示。python 2.7 接受新的字面量格式,但仍使用之前章节中的2.6显示形式来显示set。在所有版本的python中,set内置函数仍然需要用来创建空set和从现存可迭代对象中构建set(除了使用本章稍后会讨论的 set comprehensions),但新字面量很方便用来初始化已知结构的set。

下面是3系列中set看起来像什么样子;在2.7是一样的,除了是用2系列的 set([...])表示法来显示set结果,而且项的顺序可能依版本而异(不管怎样,根据定义这无关紧要):

c:\code> c:\python33\python
>>> set([1, 2, 3, 4]) # 内置函数: 同 2.6 中一样
{1, 2, 3, 4}
>>> set('spam') # 添加可迭代对象中的所有项
{'s', 'a', 'p', 'm'}
>>> {1, 2, 3, 4} # set字面量:在 3.x (和 2.7)中的新东西
{1, 2, 3, 4}
>>> s = {'s', 'p', 'a', 'm'}
>>> s
{'s', 'a', 'p', 'm'}
>>> s.add('alot') # 方法像之前那样工作
>>> s
{'s', 'a', 'p', 'alot', 'm'}

所有在之前章节中讨论过的set处理操作在3.x中工作起来是一样的,但结果的set打印出来是不同的:

>>> s1 = {1, 2, 3, 4}
>>> s1 & {1, 3} # 交集
{1, 3}
>>> {1, 5, 3, 6} | s1 # 并集
{1, 2, 3, 4, 5, 6}
>>> s1 - {1, 3, 4} # 差集
{2}
>>> s1 > {1, 3} # 超集
true

注意在所有的python版本中, {} 仍是一个字典。空set必须使用set内置函数来创建,并且以同样的方式打印出来:

>>> s1 - {1, 2, 3, 4} # 空set打印出来是不同的
set()
>>> type({}) # 因为 {} 是空字典

>>> s = set() # 初始化空set
>>> s.add(1.23)
>>> s
{1.23}

如同python2.6和之前的版本,用3.x/2.7的字面量创建的set支持同样的set对象方法,其中一些方法允许通用的可迭代操作对象而表达式不允许:

>>> {1, 2, 3} | {3, 4}
{1, 2, 3, 4}
>>> {1, 2, 3} | [3, 4]
typeerror: unsupported operand type(s) for |: 'set' and 'list'
>>> {1, 2, 3}.union([3, 4])
{1, 2, 3, 4}
>>> {1, 2, 3}.union({3, 4})
{1, 2, 3, 4}
>>> {1, 2, 3}.union(set([3, 4]))
{1, 2, 3, 4}
>>> {1, 2, 3}.intersection((1, 3, 5))
{1, 3}
>>> {1,2,3} & (1,3,5)
typeerror: unsupported operand type(s) for &: 'set' and 'tuple'
>>> {1, 2, 3}.issubset(range(-5, 5))
true
>>> {1,2,3} < range(-5,5)
typeerror: '<' not supported between instances of 'set' and 'range'

本文章首发在 大发黄金版app下载 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图