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

时间:2019-06-27 13:34:04

标签: python list igraph vertex

我已经在列表中引用了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))

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

如果上下文有所不同,我将尝试查找与图形中某些顶点相对应的索引,以便可以使用generate_subgraph创建包含这些顶点的子图。不幸的是,我只知道我想要的名称标签,这些名称标签归于顶点,而induced_subraph的参数为:ductive_subgraph(graph,顶点集)

4 个答案:

答案 0 :(得分:1)

您可以全面理解清单中的内容。

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

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

答案 1 :(得分:0)

我认为您的方式很简单,也许可以通过列表理解(只是语法语法...)进一步简化:

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

如果您想要一个过度杀伤的解决方案,则可以将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

答案 2 :(得分:0)

mybiglist.index(string)的复杂度为O(n),因此基本上您可以对mybiglistmytargetlist进行double for循环。您可以提高enumerate

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

,您以后可以访问索引,即indices['abc']

答案 3 :(得分:0)

这会将您的目标列表拆分为多个块并启动单独的线程。更多信息here

import concurrent.futures

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

def get_index(x):
    return mybiglist.index(x)

with concurrent.futures.ProcessPoolExecutor() as executor:
    results = executor.map(get_index, mytargetlist)

print(list(results))