循环使用每个循环使用多个项目的Python列表

时间:2015-02-17 13:48:52

标签: python list loops

所以我正在编写一个名为Abaqus的程序的脚本....我有一个数字列表,我需要以下列方式遍历这些数字

listOfSteps = [1, 4, 7, 10, 17, 22, 28, 29, 30, 43, 47, 50]
fileNameCreate = 0 

for i in listOfSteps:

    session.viewports['Viewport: 1'].odbDisplay.setFrame(step=i, frame=-1)
    session.viewports['Viewport: 2'].odbDisplay.setFrame(step=i, frame=-1)
    session.viewports['Viewport: 3'].odbDisplay.setFrame(step=i, frame=-1)
    session.printOptions.setValues(reduceColors=False)
    session.printToFile(fileName='C:/Image'+str(fileNameCreate+1), format=PNG, 
        canvasObjects=(session.viewports['Viewport: 3'], 
        session.viewports['Viewport: 2'], session.viewports['Viewport: 1']))

所以我需要第一步使用1,第2步使用4,第3步使用7
然后执行代码保存文件

然后在10

再次开始循环

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:5)

假设我已正确理解您的问题,您可以使用iterator

listOfSteps = [1, 4, 7, 10, 17, 22, 28, 29, 30, 43, 47, 50]
fileNameCreate = 0 

it = iter(listOfSteps)

for a in it:
    b = next(it)
    c = next(it)

    session.viewports['Viewport: 1'].odbDisplay.setFrame(step=a, frame=-1)
    session.viewports['Viewport: 2'].odbDisplay.setFrame(step=b, frame=-1)
    session.viewports['Viewport: 3'].odbDisplay.setFrame(step=c, frame=-1)

    # ...

而且,如果你不介意一点魔力:

for a, b, c in zip(*[iter(listOfSteps)]*3):
    # ...
  

保证了迭代的从左到右的评估顺序。这使得使用zip(*[iter(s)]*n)将数据系列聚类成n长度组的习惯成为可能。   ~ Zip Docs

答案 1 :(得分:0)

也许尝试在代码中添加一个计数器变量

listOfSteps = [1, 4, 7, 10, 17, 22, 28, 29, 30, 43, 47, 50]
fileNameCreate = 0 
cnt = 0

for i in listOfSteps:
   cnt =+ 1
   if cnt % 3 == 0:
       # here do your write magic