Chciałbym zindeksować listę z inną taką listą
L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
Idx = [0, 3, 7]
T = L[ Idx ]
a T powinno być listą zawierającą [„a”, „d”, „h”].
Czy jest lepszy sposób niż
T = []
for i in Idx:
T.append(L[i])
print T
# Gives result ['a', 'd', 'h']
Jeśli używasz numpy, możesz wykonać rozszerzone cięcie w ten sposób:
... i prawdopodobnie jest znacznie szybszy (jeśli wydajność jest wystarczająca, aby zawracać sobie głowę importem numpy)
źródło
Podejście funkcjonalne:
źródło
b
zdarzy się, że zawiera tylko jeden element.źródło
Nie byłem zadowolony z żadnego z tych podejść, więc wymyśliłem
Flexlist
klasę, która pozwala na elastyczne indeksowanie według liczby całkowitej, wycinka lub listy indeksów:Które, na przykład, użyłbyś jako:
źródło
existing_list = Flexlist(existing_list)
i mamy wymaganą funkcjonalność bez łamania koduChciałbym użyć
Dict add
pożądanekeys
, abyindex
źródło
Możesz również użyć
__getitem__
metody połączonej zmap
następującymi:źródło