包含重叠间隔的分块列表

2024-04-25 15:23:06 发布

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

给出以下列表:

l1 = [0,1000,5000,10000,20000,30000,40000,50000]

我知道我可以通过查看每一对连续的数字来创建一大块:

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

for group in chunker(l1, 2):
   print(group)

这将返回:

[0, 1000]
[5000, 10000]
[20000, 30000]
[40000, 50000]

如何确保重叠的间隔,例如[1000,5000],也包括在内?你知道吗

预期产量:

[0, 1000]
[1000, 5000] 
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]

Tags: inposl1列表forsizelenreturn
3条回答

嗨,你只需要删除足迹:

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq)))

for group in chunker(l1, 2):
   print(group)


[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
[50000]

一种方法是将列表理解与^{}一起使用:

[[i,j] for i,j in zip(l1[:-1], l1[1:])]

[[0, 1000],
 [1000, 5000],
 [5000, 10000],
 [10000, 20000],
 [20000, 30000],
 [30000, 40000],
 [40000, 50000]]

或者使用您的方法,但是在range中设置一个1(这也是默认的步长)的步长:

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), 1))

for group in chunker(l1, 2):
    print(group)

[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
[50000]

不必要地使用步长在范围内迭代。这样可以防止组从另一个组结束的地方开始。此代码应适用于:

l1 = [0,1000,5000,10000,20000,30000,40000,50000]

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq)))

for group in chunker(l1, 2):
   print(group)

输出为:

[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
[50000]

你可以跳过最后一个元素,如果这是你想要的,但取决于你的要求。你知道吗

相关问题 更多 >