使用 itertools 模块中的组合函数
2007-03-29 12:37:13 来源:WEB开发网核心提示: 深入探讨itertools 中包含的函数是一个很好的开始,不使用其它函数,使用 itertools 模块中的组合函数(5),只用这些函数就可以让 Python 程序员更轻松地利用和组合迭代器,一般说来,您还可以通过使它们分散排列来组合几个序列,还没有任何对序列执行这样相同操作的内置语法,迭
深入探讨
itertools 中包含的函数是一个很好的开始。不使用其它函数,只用这些函数就可以让 Python 程序员更轻松地利用和组合迭代器。一般说来,迭代器的广泛使用对 Python 的未来无疑是很重要的。但是除了过去所包含的内容以外,我还要对该模块的将来更新提几点建议。您可以立即很方便地使用这些函数 - 当然,如果它们是后来被包含进来的,那么名称或接口细节会有所不同。
一种可能会很通用的类别是一些将多个 iterable 作为参数,随后从每个 iterable 产生单独元素的函数。与此相对照的是, izip() 产生元素元组,而 imap() 产生从基本元素计算而来的值。我头脑中很清晰的两个安排是 chain() 和 weave() 。第一个在效果上类似于序列并置(但是有点惰性)。即,在您可能使用的纯序列中,例如:
for x in ('a','b','c') + (1, 2, 3):
do_something(x)
对于一般的 iterables,您可以使用:
for x in chain(iter1, iter2, iter3):
do_something(x)
Python 实现是:
清单 3. chain() 的样本实现
def chain(*iterables):
for iterable in iterables:
for item in iterable:
yield item
使用 iterables,您还可以通过使它们分散排列来组合几个序列。还没有任何对序列执行这样相同操作的内置语法,但是 weave() 本身也非常适用于完整的序列。下面是可能的实现(Magnus Lie Hetland 提出了 comp.lang.python 的类似函数):
清单 4. weave() 的样本实现
def weave(*iterables):
"Intersperse several iterables, until all are exhausted"
iterables = map(iter, iterables)
while iterables:
for i, it in enumerate(iterables):
try:
yield it.next()
except StopIteration:
del iterables[i]
[]
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接