在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