提供列表:
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]
答案 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]