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...')
我正在编写一个脚本来将日志文件分类为更方便的数据,为此我使用了 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...')