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或其他任何东西。
更好的方法吗?感谢
答案 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