Python ha un modo per fare foreach all'indietro? Spero di fare un filtro() (o una lista di comprensione) e invertire una lista allo stesso tempo, in modo che io possa evitare di farlo separatamente (che sospetto sarà più lento). Sto usando Python 2.4 (devo sfortunatamente), ma sono anche curioso di sapere quale sarebbe la soluzione di comprensione delle liste in python 3.0.Python foreach all'indietro
Modifica Entrambe queste soluzioni sembrano essere la stessa:
python -m timeit -s 'x=[1,2,3,4,5]*99; filter(lambda x: x == 5, reversed(x))'
100000000 loops, best of 3: 0.0117 usec per loop
python -m timeit -s 'x=[1,2,3,4,5]*99; x.reverse(); filter(lambda x: x == 5, x)'
100000000 loops, best of 3: 0.0117 usec per loop
Non sono sicuro perché si sospetta che sarebbe stato più lento, almeno fino a un punto che si dovrebbe preoccupare. Questo suona un po 'come l'ottimizzazione prematura per me. –
Mi è sembrato come filter() passare una volta e reverse() attraversa una seconda volta, quindi ho pensato che ci sarebbe stato un modo per farlo con una traversata. – shadowland
Puoi sempre srotolare i due manualmente, ma non sarà più veloce se scritto in Python, e il sovraccarico quasi certamente (* specialmente * se non hai dati rigidi per dimostrare il contrario) non vale la pena scrivere un'estensione C modulo. E supponendo che tu scriva anche la comparazione in C, richiamare in Python per ogni oggetto ridurrà di molto ogni potenziale guadagno. – delnan