我有一些功能 FUN(a, b): 在两个字符上。我想定义另一个函数 foo(s),这样
foo(s):
FUN(a[0],a[1])
FUN(a[2],a[3])
FUN(a[4],a[5])
...
对于 s 中的所有字符(假设 s 是偶数长度)。我的想法是我们基本上需要运行 FUN(a,b) (len(s)%2) 次,但我不确定如何以这种方式迭代函数,同时还要确保 FUN 具有正确的输入。有任何想法吗?
那么这很容易做到zip
:
def fun(a, b):
print a, b
def foo(s):
for x, y in zip(s[::2], s[1::2]):
fun(x, y)
foo("12345678")
输出:
1 2
3 4
5 6
7 8
使用生成器的更有效的方法是使用izip
(相同的输出):
from itertools import izip
def fun(a, b):
print a, b
def foo(s):
for x, y in izip(s[::2], s[1::2]):
fun(x, y)
foo("12345678")
当一个问题被标记为时,iteration
必须有一种方法来处理它iter
。:-)
values = range(10)
def do_work(x, y):
print('{}_{}'.format(x, y))
it = iter(values)
try:
while it:
do_work(next(it), next(it))
except StopIteration:
pass
来自 l4mpi 的好建议:
it = iter(values)
for value in it:
do_work(value, next(it))