OK, capisco quello che vuoi dire e una linea singola di Python sarà sufficiente:
usando di lista
[ j for (i,j) in zip(a,x) if i >= 4 ]
# a will be the list compare to 4
# x another list with same length
Explanation:
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j']
funzione Zip restituirà una lista di tuple
>>> zip(a,x)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
La comprensione degli elenchi è una scorciatoia per eseguire il ciclo di un elemento sulla lista che dopo "in", e valutare l'elemento con espressione, quindi restituire il risultato in un elenco, inoltre è possibile aggiungere la condizione su cui si desidera restituire il risultato
>>> [expression(element) for **element** in **list** if condition ]
Questo codice non fa altro che restituire tutte le coppie chiuse.
>>> [(i,j) for (i,j) in zip(a,x)]
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
Quello che facciamo è quello di aggiungere una condizione su di esso per specificare "se" seguire da un'espressione booleana
>>> [(i,j) for (i,j) in zip(a,x) if i >= 4]
[(4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
utilizzando itertools
>>> [ _ for _ in itertools.compress(d, map(lambda x: x>=4,a)) ]
# a will be the list compare to 4
# d another list with same length
Usa itertools.compress con single line in Python per finire chiudi questa attività
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> d = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'] # another list with same length
>>> map(lambda x: x>=4, a) # this will return a boolean list
[False, False, False, True, True, True, True, True, True]
>>> import itertools
>>> itertools.compress(d, map(lambda x: x>4, a)) # magic here !
<itertools.compress object at 0xa1a764c> # compress will match pair from list a and the boolean list, if item in boolean list is true, then item in list a will be remain ,else will be dropped
#below single line is enough to solve your problem
>>> [ _ for _ in itertools.compress(d, map(lambda x: x>=4,a)) ] # iterate the result.
['d', 'e', 'f', 'g', 'h', 'j']
Spiegazione per itertools.comprimere, credo che questo sarà chiaro per la vostra comprensione:
>>> [ _ for _ in itertools.compress([1,2,3,4,5],[False,True,True,False,True]) ]
[2, 3, 5]
i loop sono un buon punto di partenza. – monkut
L'esempio 'idx' è errato, ci sono solo ** 9 elementi ** nell'elenco e quindi ** 9 indici, 0-8 **. – Aesthete
La tua domanda è leggermente in contraddizione con se stessa. Sembra che potresti avere indici confusi con elementi (il tuo 'idx' in effetti è una lista di elementi e stai chiedendo un elenco di indici). Inoltre, per favore, dì cosa hai provato da solo prima di chiedere? – 0xc0de