@PesyCorm

Как увеличить длину в range во время итерации по нему?

Привет! Как я могу увеличить длину для range во время того, как итерируюсь по нему?
Я имею ввиду:
Предположим, у меня есть структура с разными значениями, некоторые нужно получить в определенном кол-ве
spisok = [1, 0, 1, 1, 0, 1, 0, 1, 1]
Мне нужно получить первые три элемента 1 и я знаю, что среди них могут быть 0, а могут и не быть
for el in range(3):
    if el == 0:
        _пусть range пройдет на 1 элемент больше
        continue

Как этот псевдокод можно превратить в рабочий? Спасибо за ответ!
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 5
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Получить первых 3 ненулевых элемента, если я правильно понял:
spisok = [1, 0, 2, 0, 0, 0, 0, 3, 0, 4, 5]
list(filter(bool, spisok))[0:3]
# [1, 2, 3]
Ответ написан
Комментировать
shabelski89
@shabelski89
engineer
Бред какой-то , не надо итерировать range , берите весь список
Ответ написан
@kokapuk
Берите весь список, так будет намного легче
spisok = [1, 0, 1, 1, 0, 1, 0, 1, 1]
counter = 0
new_spisok = []
for el in spisok:
    if el == 1:
        if counter < 3:
            new_spisok.append(el)
            counter += 1
print(new_spisok)

вывод: [1, 1, 1]
Ответ написан
Комментировать
@dmshar
Вот так вы не будете делать даже лишних проверок, т.е цикл закончится как только свои три единицы вы наберете:

a=[]
spisok = [1, 0, 1, 1, 0, 1, 0, 1, 1]
сnt=0
for el in spisok:
    if  сnt<3:
        if el == 1:
            a.append(el)
            сnt+=1
    else:
        break


Результат:
Out[73]: [1, 1, 1]
Ответ написан
Комментировать
@anerev
Надо работать в цикле со своим списком, а не с range, это реально какой-то бред, надо что-то типа такого:
ll = [1, 0, 1, 1, 0, 1, 0, 1, 1]
answeк = []
    for i in ll:
        if i == 0:
            continue
        elif i == 1:
            if len(answer) >= 3:
                break
            else:
                answer.append(i)
Ответ написан
Ваш ответ на вопрос

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

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