如何遍历一个带编号的列表,并且每次出现值1时都要重新开始?

时间:2019-05-17 05:50:12

标签: python-3.x list loops dataframe

提供列表:

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

虽然通过list1进行迭代,但每次击中整数1时,都要重新开始循环,但将其递增1。

尝试了下面的两个示例,但它仅返回长度为list1的1列表。

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 个答案:

答案 0 :(得分:1)

您对此太想了。将变量初始化为零。在每次迭代时将其追加到列表。如果相应的列表值为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]

如果您要我提供针对该问题的pythonic解决方案,我建议使用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]