Пропустить несколько итераций в цикле - PullRequest
0 голосов
/ 05 декабря 2018

Ищите что-то, что позволило бы пропустить несколько циклов for при наличии тока index.

В псевдокоде это выглядело бы примерно так:

z = [1,2,3,4,5,6,7,8]
for element in z:
     <calculations that need index>
    skip(3 iterations) if element == 5

Есть ли такая вещь в Python 2?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я бы перебрал iter(z), используя islice, чтобы отправить ненужные элементы в забвение ... напр.

from itertools import islice
z = iter([1, 2, 3, 4, 5, 6, 7, 8])

for el in z:
    print(el)
    if el == 4:
        _ = list(islice(z, 3))  # Skip the next 3 iterations.

# 1
# 2
# 3
# 4
# 8

Оптимизация
Если выпропуская maaaaaaany итераций, то в этот момент list, если результат окажется неэффективным в памяти.Попробуйте итеративно потреблять z:

for el in z:
    print(el)
    if el == 4:
        for _ in xrange(3):  # Skip the next 3 iterations.
            next(z)

Спасибо @Netwave за предложение.


Если вы тоже хотите индекс, рассмотрите обтекание iter вокруг enumerate(z)вызов (для python2.7 .... для python-3.x iter не требуется).

z = iter(enumerate([1, 2, 3, 4, 5, 6, 7, 8]))
for (idx, el) in z:
    print(el)
    if el == 4:
        _ = list(islice(z, 3))  # Skip the next 3 iterations.

# 1
# 2
# 3
# 4
# 8
0 голосов
/ 05 декабря 2018

Для этой цели вы можете использовать цикл while.

z = [1,2,3,4,5,6,7,8]
i = 0

while i < len(z):
    # ... calculations that need index
    if i == 5:
        i += 3
        continue

    i += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...