在列表中一次迭代两个项目的方法?

Mat*_*son 6 python maya

我想知道是否有更好的方法在列表中一次迭代两个项目.我经常使用Maya,其中一个命令(listConnections)返回一个交替值列表.该列表将类似于[connectionDestination,connectionSource,connectionDestination,connectionSource].要对此列表执行任何操作,我最好还是要做类似的事情:

for destination, source in cmds.listConnections():
    print source, destination
Run Code Online (Sandbox Code Playgroud)

你当然可以使用[:: 2]迭代列表中的每个其他项目,枚举和source将是索引+ 1,但是你必须为奇数列表和东西添加额外的检查.

到目前为止,我最接近的是:

from itertools import izip
connections = cmds.listConnections()
for destination, source in izip(connections[::2], connections[1::2]):
    print source, destination
Run Code Online (Sandbox Code Playgroud)

这并不是非常重要,因为我已经有办法做我想做的事情.这似乎就是应该有更好的方法之一.

And*_*ark 6

您可以使用以下方法对iterable中的项进行分组,该文件取自以下文档zip():

connections = cmds.listConnections()
for destination, source in zip(*[iter(connections)]*2):
    print source, destination
Run Code Online (Sandbox Code Playgroud)

或者对于更易读的版本,请使用itertools文档中的grouper 配方:

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
Run Code Online (Sandbox Code Playgroud)