Załóżmy, że mam dwie listy. Lista zwykła i lista zagnieżdżona z liczbami będącymi indeksami innej listy, na przykład:
>>> mylist = ['hi', 'hello', 'bye', 'cya']
>>> myindexes = [[[0, 1], [2, 3]], [[0, 2], [1, 3]], [[0, 3], [1, 2]]]
Jak zmienić wszystkie indeksy w myindexes
na elementy z mylist
z tymi indeksami bez spłaszczania myindexes
?
Lubię to:
>>> replace_indexes_with_list_items(myindexes)
[[['hi', 'hello'], ['bye', 'cya']], [['hi', 'bye'], ['hello', 'cya']], [['hi', 'cya'], ['hello', 'bye']]]
Zauważ, że jest to regularnie zagnieżdżona lista.
Próbowałem tego:
>>> myindexes = [mylist[a] for c in myindexes for b in c for a in b]
Ale spłaszcza listę:
['hi', 'hello', 'bye', 'cya', 'hi', 'bye', 'hello', 'cya', 'hi', 'cya', 'hello', 'bye']
2 odpowiedzi
Prostym podejściem byłoby:
>>> [[[mylist[i], mylist[j]], [mylist[k], mylist[l]]] for [i, j], [k, l] in myindexes]
[[['hi', 'hello'], ['bye', 'cya']],
[['hi', 'bye'], ['hello', 'cya']],
[['hi', 'cya'], ['hello', 'bye']]]
Albo to,
>>> [[[mylist[i3] for i3 in i2] for i2 in i1] for i1 in myindexes]
[[['hi', 'hello'], ['bye', 'cya']],
[['hi', 'bye'], ['hello', 'cya']],
[['hi', 'cya'], ['hello', 'bye']]]
Jeśli chcesz spróbować numpy
, {{ X1}}:
>>> import numpy as np
>>> np.vectorize(mylist.__getitem__)(myindexes).tolist()
[[['hi', 'hello'], ['bye', 'cya']],
[['hi', 'bye'], ['hello', 'cya']],
[['hi', 'cya'], ['hello', 'bye']]]
Lub np.take
>>> np.take(mylist, myindexes).tolist()
[[['hi', 'hello'], ['bye', 'cya']],
[['hi', 'bye'], ['hello', 'cya']],
[['hi', 'cya'], ['hello', 'bye']]]
Odwróć kolejność pętli i zagnieżdżaj wyrażenia listowe, aby dopasować zagnieżdżenie myindexes
:
>>> [[[mylist[a] for a in b] for b in c] for c in myindexes]
[[['hi', 'hello'], ['bye', 'cya']], [['hi', 'bye'], ['hello', 'cya']], [['hi', 'cya'], ['hello', 'bye']]]
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.