Я пишу скрипт для сортировки лог-файлов в более удобные данные, и для этого я использую функцию 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
Это скажет мне, если часть строки i соответствует любому из элементов в моем списке look_for. Однако есть ли способ определить, какой элемент соответствует? Я не смог найти встроенный способ для любого (), чтобы сделать это, и не думаю, что есть один, и как бы это решить? Этот фрагмент намного быстрее, чем предыдущий метод, который я использовал (простой цикл в основном), поэтому я предпочел бы продолжать использовать это.
Спасибо!
Используя
any
, вы семантически отбрасываете возвращаемое значение. Вас не волнует, какой из них вам просто нужно, еслиany
из них истинно.Вместо этого я предлагаю использовать явное. Это яснее и устраняет сложность непонятного next () с обработкой исключений. Производительность одинакова:
Вы можете использовать
next((search for search in look_for if (search in i)), None)
, чтобы получить первый соответствующий элемент. Он все еще замыкается, поэтому он прекратит поиск после того, как найдет совпадение. Если совпадение не найдено, возвращается второй аргумент.StopIteration
, если ничего не найдено.StopIteration
для случая, когда ничего не найдено. (Какой может быть лучший ответ, но вы должны объяснить это здесь.)next()
._sentinel=object()
).