Python - список - невозможно определить размер - PullRequest
0 голосов
/ 09 октября 2019

У меня есть функция, которая предназначена для анализа текстового файла, поиска соответствия регулярному выражению (ip + port) и возврата списка с уникальным значением:

def parser (file):
    ip_list = []
    pattern = re.compile('[0-9]+(?:\.[0-9]+){3}.port.*')
    for i, line in enumerate(open(file)):
        for match in re.finditer(pattern, line):
            ip_list.append(match.group())
    unique_ip = reduce(lambda l, x: l if x in l else l+[x], ip_list,[])
    return [unique_ip]

Это работает довольно хорошо, но для некоторыхпричина, по которой я не могу перебрать возвращенный объект списка и получить текущий размер. Например, если я распечатаю

print(parser(file))

и получаю следующий вывод:

[['212.162.82.10 port 80', '212.162.81.10 port 8081']]

Я получаю список размером 1 (несмотря на то, что есть 2 элемента):

print(len(parser(file)))
1

Я не понимаю, где я делаю ошибку. ТНХ

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

У вас есть двумерный массив с двойными скобками [[

Попробуйте взамен len(parser(file[0])) или обновите код, изменив return [unique_ip] на return unique_ip

1 голос
/ 09 октября 2019

Если вы заметили, что вывод имеет две скобки, что означает список внутри списка. Вы перебираете самый внешний список, который имеет только один элемент: внутренний список. Так что длина действительно одна.

Вместо возврата [unique_ip], просто сделайте return unique_ip.

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