Использование Python any (), который соответствует? - PullRequest
0 голосов
/ 05 июня 2018

Я пишу скрипт для сортировки файлов журналов в более удобные данные и для этого использую функцию any ().Теперь я знаю, соответствует ли часть строки какому-либо элементу в моем списке.Вот функция:

    def logfiles(self):

    look_for = ['network', 'skip', 'remove', 'jitter', 'loss', 'diff']
    analyze = self.open_logs('logfile-1.log')
    result = []

    for i in analyze:
        i = i.strip()

        if any(search in i for search in look_for):
            result.append(i)

    return result

Это скажет мне, соответствует ли часть строки, которую я соответствую, любому из элементов в моем списке look_for.Однако есть ли способ также определить, какой элемент соответствует?Я не смог найти встроенный способ для любого (), чтобы сделать это, и не думаю, что есть один, так как можно было бы решить это?Этот конкретный фрагмент намного быстрее, чем предыдущий метод, который я использовал (простой цикл в принципе), поэтому я бы предпочел продолжить использовать этот ..

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Используя any, вы семантически отбрасываете возвращаемое значение.Вам не важно, какой из них, вам просто важно, что если any из них истинно.

Я предлагаю вместо этого использовать явный для.Он более понятен и устраняет сложность неясного next () с обработкой исключений.Производительность одинакова:

for search in look_for:
    if search in i:
        break
else:
    print('Not found...')
0 голосов
/ 05 июня 2018

Вы можете использовать next((search for search in look_for if (search in i)), None), чтобы получить первый соответствующий элемент.Это по-прежнему короткое замыкание, поэтому он прекратит поиск после того, как найдет совпадение.Если совпадений не найдено, будет возвращен второй аргумент.

...