Python循环在键名中使用索引号
我刚开始学习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鼓励程序员在需要的时候再分配存储空间。你可以先为ip
和myip
创建空列表,然后在需要的时候用.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