两次迭代[英] iterating "by twos"

问题描述


是否有一个特殊的 pythonic 习惯用法用于迭代列表(或
tuple) 一次两个元素?

我的意思是,除了

for i in range(0, len(a), 2):
frobncate(a[i], a[i+1])

?

我想我曾经见过类似

for (x, y) in forget_expression_using(a):
fobnicate(x, y)

或者,也许我只是在做梦!:)

谢谢!
--
注意:在我的地址中,第一句之前的所有内容都是倒数;
最后一个时期以及之后的所有内容都应该被丢弃.

推荐答案

kj 写道:
是否有一个特殊的 pythonic 习惯用法用于迭代列表(或
tuple) 一次两个元素?

我的意思是,除了

for i in range(0, len(a), 2):
frobncate(a[i], a[i+1])

?

我想我曾经见过类似

for (x, y) in forget_expression_using(a):
fobnicate(x, y)

或者,也许我只是在做梦!:)

谢谢!
我也看到了同样的东西,不过忘记在哪里了.但我把它放在我的图书馆里了.
这里是:

# x.py
导入迭代工具

def 对(seq):
is1 = itertools.islice(iter(seq), 0, None, 2)
is2 = itertools.islice(iter(seq), 1, 无, 2)
返回 itertools.izip(is1, is2)

s = 范围(9)
对于 x, y 成对:
打印 x, y

dilbert@trojanpython x.py
0 1
2 3
4 5
6 7

这样的事情可能已经足够快了:
>>from itertools import izip
xpartition = lambda seq, n=2: izip(*(iter(seq),) * n)
xprimes = (x for x in xrange(2, 100) if all(x % i for i in xrange(2, x)))
list(xpartition(xprimes))
[(2, 3), (5, 7), (11, 13), (17, 19), (23, 29), (31, 37), (41, 43),
(47, 53), (59, 61), (67, 71), (73, 79), (83, 89)]

再见,
Bearophile

7 月 29 日下午 1:36*,kj <so...@987jk.com.invalid 写道:
是否有一个特殊的 pythonic 习惯用法用于迭代列表(或
元组)一次两个元素?
我经常用这个:

for x, y in zip(a, a[1:]):
frob(x, y)

杰夫 G-T


本文地址:https://www.itbaoku.cn/post/1050674.html