与列表python3中的一组元素相对应的索引集

2024-06-16 11:46:39 发布

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

我在一个列表中引用了this post for finding the index(ices) corresponding to a single named element,但是在那里的答案/文档中找不到我的问题的答案。你知道吗

具体来说:有没有比在上面的链接中迭代方法更有效的方法来找到对应于一组元素的索引?你知道吗

假设我有名单

mybiglist=['abc','def','ghi','jkl','mno']

我想要对应于'abc','jkl'的索引

我可以做:

mytargetlist=['abc','jkl']
for string in mytargetlist:
    print(mybiglist.index('%s' %string))

但感觉应该有比循环更有效的方法?你知道吗

如果上下文有差异,我试图找到对应于图中某些顶点的索引,这样我就可以使用诱导子图来创建包含这些顶点的子图。不幸的是,我只知道我想要的名称标签,这些标签属于顶点,诱导子图的参数是:诱导子图(图,顶点集)


Tags: 方法答案列表forstringindexjkl标签
3条回答

你可以通过你的大名单做一次理解。你知道吗

mybiglist=['abc','def','ghi','jkl','mno']
mytargetlist=['abc','jkl']

[i for i, v in enumerate(mybiglist) if v in mytargetlist]

mybiglist.index(string)具有复杂性O(n),因此基本上在mybiglistmytargetlist上执行双for循环。您可以通过enumerate改进:

indices = {v:i for i,v in enumerate(mybiglist)}

您可以稍后访问索引,即indices['abc']。你知道吗

我认为你的方法有点简单,也许可以用列表理解来简化(这只是语法上的糖分……):

mybiglist = ['abc', 'def', 'ghi', 'jkl', 'mno']
mytargetlist = ['abc', 'jkl']
print([mybiglist.index(target) for target in mytargetlist])

如果您想要一个overkill解决方案,您可以将numpyisinwhere一起使用,以获得索引,而无需自己对其进行迭代:

import numpy as np

mybiglist = np.array(['abc', 'def', 'ghi', 'jkl', 'mno'], dtype=str)
mytargetlist = ['abc', 'jkl']

print(*np.where(np.isin(mybiglist, mytargetlist)))

但这似乎有点可笑:p

相关问题 更多 >