我的代码有效,但需要一种优雅的方式从列表中生成子列表

My code works but need an elegant way to produce sub-lists out of a list

如下所示,我有一个名为 lst 的列表,其中包含 2 个元素,代表我的一些插槽索引。我想从中获取基于 slotss 值生成的子列表,如下所示。

lst=[0,10]
slotss=4
out_lst= [0,3],[1,4],[2,5],[3,6],[4,7],[5,8],[6,9] (but not 7,10)

我的以下代码有效,但我需要一种优雅的方式来执行此操作。因为探查器显示代码在上述任务中花费了更多时间。

out_lst=[]
    for u in range(len(lst)):        
                    
        condi1=lst[u][0]
        condi2=lst[u][1]

        break_signal=0
        cnt2=condi1
        cnt1=condi1
        for i in range(condi2+1):
            in_lst=[]
    
            if i!=0:
                cnt2=cnt2+1
            
            for j in range(2):
                if cnt1>=condi2:
                    break_signal=1
                    break
                else:
                    in_lst.append(cnt1)
                    cnt1=cnt1+slotss-1
                    
            
            if break_signal==1:
                break
            else:
                cnt1=cnt2+1
        
            out_lst.append(in_lst)

您可以使用 tuple() 和生成器表达式使此表达式更简洁:

[start, end] = [0, 10]
size = 4

tuple([i, i + size - 1] for i in range(start, end - size + 1)) 

这输出:

([0, 4], [1, 5], [2, 6], [3, 7], [4, 8], [5, 9])

你可以只写一个列表理解来达到你想要的结果:

lst = [0, 10]
slotss = 4

out_lst = [[start, start + (slotss - 1)] for start in range(lst[0], lst[1] - (slotss - 1))]

输出:

[[0, 3], [1, 4], [2, 5], [3, 6], [4, 7], [5, 8], [6, 9]]

另一个版本:

out = list(enumerate(range(slotss - 1, lst[1]), lst[0]))
print(out)

打印:

[(0, 3), (1, 4), (2, 5), (3, 6), (4, 7), (5, 8), (6, 9)]