Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过包含任何迭代器或生成器的*多个参数的值进行替换_Python - Fatal编程技术网

Python 如何通过包含任何迭代器或生成器的*多个参数的值进行替换

Python 如何通过包含任何迭代器或生成器的*多个参数的值进行替换,python,Python,假设您被限制使用外部函数,如zip或任何itertool,您如何交替迭代包含多个迭代器/生成器的参数,以便打印每个迭代器/生成器的第一个索引,然后分别打印第二个、第三个等 def function(*arguments): for a in arguments: iterator = iter(a) yield next(a) 我一直在努力找出一种方法,可以找到每个iterable上每个值的下一个索引。到目前为止,我能够打印每个的第一个索引,但在使

假设您被限制使用外部函数,如zip或任何itertool,您如何交替迭代包含多个迭代器/生成器的参数,以便打印每个迭代器/生成器的第一个索引,然后分别打印第二个、第三个等

def function(*arguments):
    for a in arguments:   
        iterator = iter(a)
        yield next(a)
我一直在努力找出一种方法,可以找到每个iterable上每个值的下一个索引。到目前为止,我能够打印每个的第一个索引,但在使用while循环尝试Try和except语句之后,我对如何实现下一步感到困惑。在这种情况下,
StopIteration
异常如何工作,我也感到困惑

例如,以以下方式使用此函数:

for i in function('123', '4567', '89XY'):
    print(i,end='')
将打印:

1,4,8,2,5,9,3,6,X,7,Y
该文档为其方法提供了纯python等价物。在这种情况下,
izip
是您所寻求的:

def izip(*iterables):
    # izip('ABCD', 'xy') --> Ax By
    iterators = map(iter, iterables)
    while iterators:
        yield tuple(map(next, iterators))
并使用(字符串是可编辑的):

屈服

('a', '1', 'p')
('b', '2', 'q')
('c', '3', 'r')
可能是:

def函数(*args):
iter=map(iter,args)
而国际热核实验堆:
对于iter中的iter_arg:
尝试:
产量iter_arg.next()
除停止迭代外:
iter.移除(iter_arg)

假设您被限制使用zip或任何itertool之类的外部功能-为什么?您也不想使用类似于
范围的功能吗?您至少可以看看
循环调度
;它可以满足您的需要,您可以尝试使用为相关的
itertools
函数“不使用zip()实现zip()”提供的纯python等价物对其进行修改,但是为什么呢?这只是代码高尔夫吗?你能解释一下为什么需要在这里捕获并传递StopIteration异常吗?@user2918863,因为你的一些iterables可能会在其他iterables之前用完(例如,在你的示例中,
'123'
).另外,是否有一个特定的名称用于创建控制结构,例如使用more=False创建的控制结构,以在最后2个代码块的某个点中断循环?我真的很难理解编程的这一方面,我想更深入地研究它,因为OP的输入在长度上是不同的,你不能在迭代时安全地从列表中删除它
for i in izip('abc', '123', 'pqr'):
    print i
('a', '1', 'p')
('b', '2', 'q')
('c', '3', 'r')