Как перебрать нумерованный список, и каждый раз, когда значение 1 появляется, начинайте сначала? - PullRequest
1 голос
/ 17 мая 2019

Имеется список:

list1 = [1,2,3,4,5,6,1,2,3,4,1,2,3,4,5,6,7]

Во время итерации, хотя list1, каждый раз, когда целое число 1 ударяется, запускайте цикл заново, но увеличивайте его на 1.

Пробовал двапримеры ниже, но он возвращает только список из 1 для длины list1.

digit = []
i = 0
for num in list1:
    num = i
    if num != 1:
        i += 1
        digit.append(i)
    elif num == 1:
        digit.append(num)
digit = []
i = 0
for num in list1:
    num = i
    if num == 1:
        digit.append(num)
        continue
    elif num != 1:
        i += 1
        digit.append(i)  
digit

Хотите получить что-то вроде списка ниже

digit = [1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3]

1 Ответ

1 голос
/ 17 мая 2019

Вы думаете об этом.Инициализируйте переменную до нуля.Добавляйте его в список на каждой итерации.Увеличивайте, если соответствующее значение списка равно 1.

values = []
i = 0
for l in list1:
    if l == 1: # The check must come before appending. Can you explain why?
        i += 1

    values.append(i) 

values
# [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3]

Если бы вы спросили меня о питоническом решении этой проблемы, я бы предложил itertools.accumulate:

from itertools import accumulate
from operator import add 

list(accumulate((int(x == 1) for x in list1), add))
# [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...