按类型在列表中查找项目

Nic*_*ick 3 python search types list

我有一个列表,可以包含不同类型的几个元素.我需要检查在此列表中是否存在特定类型的一个或多个元素并获取其索引.

l = [1, 2, 3, myobj, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我可以通过遍历我的列表并检查每个元素的类型来实现这个目标:

for i, v in enumerate(l):
  if type(v) == Mytype:
    return i
Run Code Online (Sandbox Code Playgroud)

是否有更多的pythonic方法来实现相同的结果?

iCo*_*dez 6

您可以使用next生成器表达式:

return next(i for i, v in enumerate(l) if isinstance(v, Mytype)):
Run Code Online (Sandbox Code Playgroud)

这个解决方案的优点是它像你当前一样懒惰:它只会检查所需数量的项目.

此外,我使用isinstance(v, Mytype)而不是type(v) == Mytype因为它是Python中首选的类型检查方法.见PEP 0008.

最后,应该注意的是,StopIteration如果找不到所需的项目,此解决方案将引发异常.你可以通过try/except来捕获它,或者你可以指定一个默认值来返回:

return next((i for i, v in enumerate(l) if isinstance(v, Mytype)), None):
Run Code Online (Sandbox Code Playgroud)

在这种情况下,None如果没有找到,将返回.