我想知道是否有更好的方法在列表中一次迭代两个项目.我经常使用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)
这并不是非常重要,因为我已经有办法做我想做的事情.这似乎就是应该有更好的方法之一.
您可以使用以下方法对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)
| 归档时间: |
|
| 查看次数: |
4248 次 |
| 最近记录: |