其他的数字类型——sets——在python 3.x和2.7中的set comprehensions | 第二部分 类型与操作 —— 第 5 章: 数字类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-金年会app官方网

未匹配的标注

除了字面量,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测试,在有机会学习更大的语句前,理解这些语法是有挑战性的。

本文章首发在 金年会app官方网 网站上。

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



暂无话题~
网站地图