我已经在列表中引用了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,顶点集)
答案 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])
如果您想要一个过度杀伤的解决方案,则可以将numpy
与isin
和where
结合使用来获取索引,而无需自己遍历:
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)
,因此基本上您可以对mybiglist
和mytargetlist
进行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))