Python迭代从变量开始的范围(i,20)

时间:2016-01-19 05:38:58

标签: python list loops for-loop

Python新手。不知道我是否以最好的方式表达了这一点,但是这里有。我有一个像这样的命令列表:

cmd_list = [
"cmd1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.2.1",
".1.3.6.1.4.1.24391.4.1.3.3.1.3.1.4.1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.3.1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.4.1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.5.1", 
"cmd2",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.2.1",
".1.3.6.1.4.1.24391.4.1.3.3.1.3.1.4.1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.3.1",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.4.11",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.5.11",
"cmd3",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.2.12",
".1.3.6.1.4.1.24391.4.1.3.3.1.3.1.4.12",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.3.12",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.4.12",
".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.5.12",
]

将cmd1之后的5个值与cmd1进行比较,将cmd2之后的5个值与cmd2进行比较等。我试图以下列方式迭代循环,但它看起来并不理想。

i=0
for i in range(i,cmd_list.__len__()):
    #expect to first see normal command (check it doesn't start with .)
    i += 1   
    while cmd_list[i].startswith("."):
         #save these values to a list
         i += 1
    #do stuff when I have all the command info

这适用于第一个,但是当for循环迭代时,我回到1,从5或6或其他任何东西。

更好的方法吗?感谢

3 个答案:

答案 0 :(得分:1)

我把它全部写入字典:

>>> step = 6
>>> commands = {cmd_list[i]: cmd_list[i+1:i+step]
                for i in range(0, len(cmd_list), step)}

然后您可以使用命令名称进行索引:

>>> commands['cmd2']
[".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.2.1",
 ".1.3.6.1.4.1.24391.4.1.3.3.1.3.1.4.1",
 ".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.3.1",
 ".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.4.11",
 ".1.3.6.1.4.1.24391.4.1.3.2.1.2.1.5.11"]

答案 1 :(得分:0)

您遇到错误,因为变量索引i不是迭代器对象。它只是范围索引的副本。更改其值不会影响循环。

您可以为每种格式转换代码,这样您就不必担心索引了。 确保您没有推送到列表用于生成器的同一列表。 例如

commands = []
command = None
for cmd in cmd_list:
    #expect to first see normal command (check it doesn't start with .)
    if cmd.startswith("."):
      #save these values to a list
      commands.append(cmd)
    else:
      if command:
         #do stuff when I have all the command info
         commands = []
      command = cmd

答案 2 :(得分:0)

  

更好的方法吗?

这是一种更清洁的方法:

for e in cmd_list:   
    if e.startswith("."):
         #we have values to save to list
     else:
         # e is cmd1, cmd2 etc.

    #do stuff when I have all the command info