我有一些功能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具有正确的输入。有什么想法吗?
答案 0 :(得分:2)
这对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")
答案 1 :(得分:1)
当问题被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))