@howuu

Как перейти на следующею итерацию?

Пытаюсь разобраться в одном коде , есть такая функция
def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return (filter(None, values)
            for values in izip_longest(fillvalue=fillvalue, *args))


Она группирует последовательность, у меня есть последовательность, которая формируется вот так
def make_your_amazing_stuff(hashes):
    mapper = {}
    for hash, offset in hashes:
        mapper[hash.upper()] = offset

    values = mapper.keys()


в values (объект dict_keys) содержится 2300 элементов
мы можем сделать группу из 500 элементов например, вот так
группа = grouper(values, 500)

потом делаем, что нам захочется с ними
for вещь в группа:
       print(вещь)


Но я не знаю как перейти на следующею итерацию, ну вот и весь вопрос, как это сделать?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
@gh0sty
Веб-разработчик. Пишу под Python Django.
Тебе тип нужна пагинация на каждые 500 элементов? Первую функцию не понимаю, когда происходит return - функция завершает свою работу и код ниже не обрабатывается. Для скипа текущей итерации цикла пишется:
for i in range(your_range):
    if (your_if):
        continue
    #your actions

Если я правильно понял (а это трудно), ты хочешь искусственно проверить по счетчику прошло ли 500 и начать новую? Тогда код будет такой:
import math

your_data = [] # твой большой массив
new_data = [] # результирующий массив
paginate_by = 500 # по сколько в 1 массивчике
iters = math.ceil(len(your_data)/paginate_by) # Округление вверх 2.3 --> 3
for i in range(iters):
    paginated_data = your_data[(paginate_by*i):(paginate_by*(i+1))] #  срез массива, допустим i = 2, то элементы с индексом от 1000 до 1499 (включительно)
    new_data.append(paginated_data)

Или короче + твоя функция:
import math
def grouper(values, n, fillvalue=None):
    return [values[n*i:n*(i+1)] for i in range(math.ceil(len(values)/n))]

Результат с передачей массива из 10 '1', и пагинацией по 3:
data = ['1']*10
x = 3
print(grouper(data, x))
# Вывод: [['1', '1', '1'], ['1', '1', '1'], ['1', '1', '1'], ['1']]
# Или print(grouper(['1']*10, 3))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bbkmzzzz
for вещь в группа:
       print(вещь)

Цикл будет проходить последовательно по всем элементам, записывая текущий элемент в "вещь", в данном случае.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы