Size: 842
Comment:
|
Size: 3150
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 19: | Line 19: |
ä½ é%8POST http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 HTTP/1.0 | ----- /!\ Edit conflict! Other version: ----- 你霥8POST http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 HTTP/1.0 |
Line 25: | Line 26: |
----- /!\ Edit conflict! Your version: ----- 你需要在一个序列上循环,但是在每一步,你也需要知道什么索引进入到你已经到达的序列中。 == 解决 Solution == Together, the built-in functions xrange and zip make this easy. You need only this one instance of xrange, as it is fully reusable: 把内建函数xrange和zip放在一起将使它很容易。你只需要xrange的一个实例,好像它完全可重用。 {{{ indices = xrange(sys.maxint) }}} Here's how you use the indices instance: 这儿是你怎么样使用index的实例 {{{ #!python for item, index in zip(sequence, indices): something(item, index) }}} This gives the same semantics as: 给出相同的语义: {{{ #!python for index in range(len(sequence)): something(sequence[index], index) }}} but the change of emphasis allows greater clarity in many usage contexts. 但是改变的重点允许在更多使用环境中更加清楚。 Another alternative is to use class wrappers: 另一个可选择的是使用一个包装类: {{{ #!python class Indexed: def _ _init_ _(self, seq): self.seq = seq def _ _getitem_ _(self, i): return self.seq[i], i }}} For example: 例如 {{{ #!python for item, index in Indexed(sequence): something(item, index) }}} In Python 2.2, with from _ _future_ _ import generators, you can also use: 在python2.2, 从_ _future_ _导入一个产生器, 你也可以使用: {{{ #!python def Indexed(sequence): iterator = iter(sequence) for index in indices: yield iterator.next( ), index # Note that we exit by propagating StopIteration when .next raises it! }}} However, the simplest roughly equivalent way remains the good old: 然而,最简单粗糙的等价方法仍然是老的: {{{ #!pyPOST http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Content-Type: application/x-www-form-urlencoded Referer: http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible ----- /!\ End of edit conflict ----- |
文章来自《Python cookbook》. 翻译仅仅是为了个人学习,其它商业版权纠纷与此无关!
-- Zoom.Quiet [DateTime(2004-08-11T01:21:53Z)] TableOfContents
在索引和序列元素上并行循环
1.14 Looping in Parallel over Index and Sequence Items
Credit: Alex Martelli
问题 Problem
You need to loop on a sequence, but at each step you also need to know what index into the sequence you have reached.
Edit conflict! Other version:
你霥8POST http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 HTTP/1.0 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Referer: http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d1_2d14 Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/4.0 (compatible
Edit conflict! Your version:
你需要在一个序列上循环,但是在每一步,你也需要知道什么索引进入到你已经到达的序列中。
解决 Solution
Together, the built-in functions xrange and zip make this easy. You need only this one instance of xrange, as it is fully reusable:
把内建函数xrange和zip放在一起将使它很容易。你只需要xrange的一个实例,好像它完全可重用。
indices = xrange(sys.maxint)
Here's how you use the indices instance:
这儿是你怎么样使用index的实例
This gives the same semantics as:
给出相同的语义:
but the change of emphasis allows greater clarity in many usage contexts.
但是改变的重点允许在更多使用环境中更加清楚。
Another alternative is to use class wrappers:
另一个可选择的是使用一个包装类:
For example:
例如
In Python 2.2, with from _ _future_ _ import generators, you can also use:
在python2.2, 从_ _future_ _导入一个产生器, 你也可以使用:
However, the simplest roughly equivalent way remains the good old:
然而,最简单粗糙的等价方法仍然是老的: