在Python中计算数字的循环/循环

mar*_*r51 0 python loops python-3.x

试图计算机器周期.我需要帮助用一些Python代码填充ID列.谢谢你的帮助.

每次循环重新开始时,我希望ID代表从1到N的新循环.

    Cycle   ID
       1    1
       2    1
       …    1
      35    1

       1    2
       2    2
       …    2
     457    2

       1    3
       2    3
       …    3
     128    3
Run Code Online (Sandbox Code Playgroud)

PM *_*ing 5

只是为了好玩,这是一个不可读的嵌套列表理解/生成器表达式.:)

from itertools import groupby

cycle = [1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4]
a = [(v, i) for i, u in enumerate(([t[1] for t in g] 
    for _, g in groupby(enumerate(cycle), lambda t:t[1]-t[0])), 1) for v in u]

print(a)
for t in zip(*a):
    print([*t])
Run Code Online (Sandbox Code Playgroud)

产量

[(1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (1, 2), (2, 2), (3, 2), (1, 3), (2, 3), (3, 3), (4, 3)]
[1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4]
[1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)

只要数字序列中断,此代码将转到一个新的ID号cycle,新的子序列不必重新启动为1.