我的代码有效,但需要一种优雅的方式从列表中生成子列表
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)]
如下所示,我有一个名为 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)]