在Python中,如何为另一个列表build立索引?

我想用这样的另一个列表索引一个列表

L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] Idx = [0, 3, 7] T = L[ Idx ] 

T应该是一个包含['a','d','h']的列表。

有没有比这更好的方法

 T = [] for i in Idx: T.append(L[i]) print T # Gives result ['a', 'd', 'h'] 
 T = [L[i] for i in Idx] 

如果你使用numpy,你可以像这样执行扩展切片:

 >>> import numpy >>> a=numpy.array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) >>> Idx = [0, 3, 7] >>> a[Idx] array(['a', 'd', 'h'], dtype='|S1') 

…并且可能要快得多(如果性能足够让人担心numpy的导入)

 T = map(lambda i: L[i], Idx) 

function性方法:

 a = [1,"A", 34, -123, "Hello", 12] b = [0, 2, 5] from operator import itemgetter print(list(itemgetter(*b)(a))) [1, 34, 12] 

我对这些方法都不满意,所以我想出了一个Flexlist类,可以通过整数,切片或索引列表进行灵活的索引:

 class Flexlist(list): def __getitem__(self, keys): if isinstance(keys, (int, slice)): return list.__getitem__(self, keys) return [self[k] for k in keys] 

对于你的例子,你可以使用:

 L = Flexlist(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) Idx = [0, 3, 7] T = L[ Idx ] print(T) # ['a', 'd', 'h'] 
 L= {'a':'a','d':'d', 'h':'h'} index= ['a','d','h'] for keys in index: print(L[keys]) 

我会使用一个Dict add所需的keys index