Je voudrais indexer une liste avec une autre liste comme celle-ci
L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
Idx = [0, 3, 7]
T = L[ Idx ]
et T devrait finir par être une liste contenant ['a', 'd', 'h'].
Y a-t-il un meilleur moyen que
T = []
for i in Idx:
T.append(L[i])
print T
# Gives result ['a', 'd', 'h']
Si vous utilisez numpy, vous pouvez effectuer un découpage étendu comme celui-ci:
... et est probablement beaucoup plus rapide (si les performances sont suffisamment importantes pour se soucier de l'importation numpy)
la source
Une approche fonctionnelle:
la source
b
ne contient qu'un seul élément.la source
Je n'étais satisfait d'aucune de ces approches, j'ai donc proposé une
Flexlist
classe qui permet une indexation flexible, soit par entier, tranche ou liste d'index:Lequel, pour votre exemple, vous utiliseriez comme:
la source
existing_list = Flexlist(existing_list)
et nous avons la fonctionnalité requise sans casser le codeJ'utiliser un
Dict add
désirékeys
pourindex
la source
Vous pouvez également utiliser la
__getitem__
méthode combinée avecmap
comme suit:la source