Python 使用any(),匹配哪个?

Python use of any(), which one matches?

我正在编写一个脚本来将日志文件分类为更方便的数据,为此我使用了 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() 这样做,而且我认为没有这样的方法,那么人们将如何解决这个问题呢?这个特定的片段比我以前使用的方法(基本上是一个简单的循环)快得多,所以我更愿意继续使用这个..

谢谢!

您可以使用next((search for search in look_for if (search in i)), None)获取第一个匹配元素。它仍然短路,所以它会在找到匹配项后停止搜索。如果没有找到匹配项,将返回第二个参数。

通过使用 any,您在语义上丢弃了 return 值。你不关心哪一个,你只关心其中 any 个是否为真。

我建议改用显式 for。它更清晰,并通过异常处理消除了晦涩难懂的 next() 的复杂性。性能相同:

for search in look_for:
    if search in i:
        break
else:
    print('Not found...')