如何通过改变步长来拆分列表?

2024-03-28 20:30:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,我想分成不同的步长。例如,如果我有一个从1到100的列表,在每次迭代结束时,我希望输出为:

[1, 2, 3] 
[4, 5, 6, 7, 8]
[9, 10, 11, 12, ..., 15]
[16, 17, ..., 25]

第一个列表的长度是3,然后是5,然后是7,然后是9。在

我有的是这个

^{pr2}$

我知道这不管用,但我不知道需要改变什么。在


Tags: 列表步长pr2
1条回答
网友
1楼 · 发布于 2024-03-28 20:30:01

由于步长不同,因此需要一个while循环:

lst = list(range(1,101))
step = 3
idx = 0
while idx<len(lst):
    print(lst[idx:idx+step])
    idx += step
    step += 2
网友
2楼 · 发布于 2024-03-28 20:30:01

注意,开始切片的索引由闭合形式给出:

n**2 - 1 

因此:

^{pr2}$
网友
3楼 · 发布于 2024-03-28 20:30:01

丹尼尔的回答是最简洁的,但我想指出的是,有时候,你会遇到更复杂的情况,想要从不同的iterables得到相同的切片。然后,您还可以继续存储在列表中编写[start:stop:step]时python生成的实际slice(start,stop[,step])对象并使用它。E、 g.:

r1 = range(1,101)
r2 = list(reversed(r1))

slices = [slice(0,5,3)]
for i in range(20):
    slices.append( slice(
                         slices[-1].stop,
                         slices[-1].stop + slices[-1].step + 1,
                         slices[-1].step + 1)
                 )

print [ (r1[s],r2[s]) for s in slices ]

相关问题 更多 >