Цикл Python, использующий номер индекса как часть имени ключа - PullRequest
1 голос
/ 20 января 2011

Я новичок в 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 ]

6 голосов
/ 20 января 2011

Никаких циклов не требуется, вы можете просто написать:

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
2 голосов
/ 20 января 2011
ip = [None, ] * 5
myip = [None, ] * 5

Добавьте это над своим кодом. Тогда вы используете это так: ip[i] = ..., myip[i] = ...

0 голосов
/ 20 января 2011

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...