Python循环使用索引号作为键名的一部分

时间:2011-01-20 13:44:26

标签: python loops

我是Python的新手 - 让我的脚湿透。

我想创建一个查找ip地址的循环,并使用循环计数作为密钥名称的一部分。

i = 0
while i < 5:
  ip1= re.search(r'(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}', commandslist)
  if ip1:
    myip1 = ip1.group()
    commandslist = commandslist.replace(myip1,'')
    print 'found', ip1.group()
   i=i+1

我想做的是说ip1或myip1用i的当前值替换1。我已经尝试过ip [i]并且只是抛出了没有被定义的错误。定义ip = range(0,5)似乎没有任何帮助。

有人能指出我回到正确的道路吗? 谢谢。

3 个答案:

答案 0 :(得分:6)

不需要循环,您可以简单地写:

myip = re.findall(r'(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}', commandslist)

当你真的需要循环时,请避免这样:

i = 0
while i < 5:
    # do something with i
    i = i + 1

并改为使用:

for i in xrange(5):
    # do something with i

当您需要迭代列表的元素时,请使用:

for e in l:
    # do something with e

在您的情况下,完整的示例可能如下所示:

import re

commandslist = 'Lorem 192.168.0.1, ipsum 127.0.0.1: 10.0.0.1 and 10.0.0.2.'
myips = re.findall(r'(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}', commandslist)
for ip in myips:
    print 'found ', ip

答案 1 :(得分:2)

ip = [None, ] * 5
myip = [None, ] * 5

在代码上方添加此项。然后你就像这样使用它:ip[i] = ...myip[i] = ...

答案 2 :(得分:0)

Python鼓励程序员在需要时为存储分配空间。 在您的尝试中,为ipmyip分配空列表,然后在必要时使用.append添加元素。

列表将增长到任何(合理的)长度,代码将不依赖于初始分配大小。 ip[-1]表示法引用序列的最后一个元素。 循环内部不使用运行索引i

ip = []
myip = []
i = 0
while i < 5:
    ip.append(re.search(r'(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}', commandslist))
    if ip[-1]:
        myip.append(ip[-1].group())
        commandslist = commandslist.replace(myip[-1],'')
        print 'found', ip[-1].group()
    i=i+1

请仔细阅读教程,并特别注意lists介绍。