Python循环在键名中使用索引号

1 投票
3 回答
518 浏览
提问于 2025-04-16 10:18

我刚开始学习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中的1替换成当前的i值。我试过用ip[i],但总是报错,说没有定义。定义ip=range(0,5)似乎也没有什么帮助。

有没有人能帮我指明正确的方向?谢谢。

3 个回答

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的介绍。

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

在你的代码上面加上这个。然后你可以这样使用它:ip[i] = ...myip[i] = ...

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

撰写回答