按类型查找列表中的项

2024-06-06 17:49:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,可以包含几个不同类型的元素。 我需要检查这个列表中是否有一个或多个特定类型的元素,并获取其索引。你知道吗

l = [1, 2, 3, myobj, 4, 5]

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

for i, v in enumerate(l):
  if type(v) == Mytype:
    return i

有没有一种更像Python的方法来达到同样的效果?你知道吗


Tags: 方法in元素类型目标列表forreturn
2条回答

可以使用^{}generator expression

return next(i for i, v in enumerate(l) if isinstance(v, Mytype)):

此解决方案的优点是,它与当前的解决方案类似:它只检查所需数量的项。你知道吗

另外,我使用了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):

在这种情况下,如果找不到任何内容,将返回None。你知道吗

你可以使用列表理解。你知道吗

获取字符串类型的所有元素:

b = [x for x in a if isinstance(x,str)]

获取string类型元素的所有索引:

b = [x[0] for x in enumerate(a) if isinstance(x[1],str)]

相关问题 更多 >