其他的数字类型——Sets——在Python 3.X和2.7中的set comprehensions

未匹配的标注

除了字面量,Python 3系列增加了set comprehension的结构,它也被逆向移植到了2.7中。就像3系列的set字面量,2.7也接受了这个语法,但以2系列set表示法来显示结果。set comprehension表达式类似于之前在第4章中看到的list comprehension,但它是在花括号而非方括号中编码的且运行来创建set而非列表。set comprehension运行循环并收集每次循环的表达式的结果;循环变量可以访问用于结合表达式中的当前迭代值。结果是运行代码所创建的新的set,带有所有普通的set行为。下面是3.3中的set comprehension(再说一次,结果显示和排序和2.7中不同):

>>> {x ** 2 for x in [1, 2, 3, 4]} # 3.X/2.7 set comprehension
{16, 1, 4, 9}

在这个表达式中,循环编码写在右边,集合表达式编码在左边(x ** 2)。如同列表 comprehension,得到的几乎就是表达式所说的:“根据列表中的每一个X,给出一个新的包含X的平方的set。” Comprehensions 还可以在其他类型的对象上迭代,如字符串(下面第一个例子就显示了以基于comprehension的方式来从一个现成的可迭代对象创建set):

>>> {x for x in 'spam'} # 和: set('spam') 一样
{'m', 's', 'p', 'a'}
>>> {c * 4 for c in 'spam'} # 汇集表达式结果的set
{'pppp', 'aaaa', 'ssss', 'mmmm'}
>>> {c * 4 for c in 'spamham'}
{'pppp', 'aaaa', 'hhhh', 'ssss', 'mmmm'}
>>> S = {c * 4 for c in 'spam'}
>>> S | {'mmmm', 'xxxx'}
{'pppp', 'xxxx', 'mmmm', 'aaaa', 'ssss'}
>>> S & {'mmmm', 'xxxx'}
{'mmmm'}

因为剩余的comprehension故事依赖于还未准备好处理的潜在概念,进一步细节将被推迟到本书稍后部分。在第8章中,将在3.X和2.7中见到第一个类似的对象(字典comprehension),然后对所有comprehensions,还有许多要讲述——列表,set,字典和构造器——稍后,特别是在第14章第20章。在那里将知道:所有的comprehension支持未在这里展示的语法,包括嵌套循环和if测试,在有机会学习更大的语句前,理解这些语法是有挑战性的。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~