import itertools
output = list(itertools.islice(q, 3, 7))
Na przykład:
>>> import collections, itertools
>>> q = collections.deque(xrange(10, 20))
>>> q
deque([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> list(itertools.islice(q, 3, 7))
[13, 14, 15, 16]
ten powinien być bardziej efektywny gdy inne rozwiązania pisał do tej pory. Dowód?
[[email protected]]$ SETUP="import itertools,collections; q=collections.deque(xrange(1000000))"
[[email protected]]$ python -m timeit "$SETUP" "list(itertools.islice(q, 10000, 20000))"
10 loops, best of 3: 68 msec per loop
[[email protected]]$ python -m timeit "$SETUP" "[q[i] for i in xrange(10000, 20000)]"
10 loops, best of 3: 98.4 msec per loop
[[email protected]]$ python -m timeit "$SETUP" "list(q)[10000:20000]"
10 loops, best of 3: 107 msec per loop
Bardzo ładne. Ponieważ masz pełny przykład, być może 'q.extend (zakres (10, 20))' może być lepszy. –
@rm tak, 'q.extend (..)' byłoby dobrze. W rzeczywistości należy użyć 'q = deque (xrange (10,20))'. Po prostu skopiowałem przykład OP, tak jak jest. Zaktualizowana odpowiedź. –