包含重叠间隔的分块列表
Chunking list including overlapping intervals
给定以下列表:
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)
这个returns:
[0, 1000]
[5000, 10000]
[20000, 30000]
[40000, 50000]
如何确保重叠间隔(例如 [1000,5000]
)也包括在内?
预期输出:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
一种方法是使用列表理解 zip
:
[[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]
如果您愿意,可以跳过最后一个元素,但这取决于您的要求。
您好,您只需删除足迹:
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]
l1 = [0,1000,5000,10000,20000,30000,40000,50000]
def chunker(seq, size):
return ([seq[i], seq[i+1]] for i in range(len(seq)) if i<len(seq)-1)
for group in chunker(l1, 2):
print(group)
# result:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 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), size))
for group in chunker(l1, 2):
print(group)
这个returns:
[0, 1000]
[5000, 10000]
[20000, 30000]
[40000, 50000]
如何确保重叠间隔(例如 [1000,5000]
)也包括在内?
预期输出:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]
一种方法是使用列表理解 zip
:
[[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]
如果您愿意,可以跳过最后一个元素,但这取决于您的要求。
您好,您只需删除足迹:
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]
l1 = [0,1000,5000,10000,20000,30000,40000,50000]
def chunker(seq, size):
return ([seq[i], seq[i+1]] for i in range(len(seq)) if i<len(seq)-1)
for group in chunker(l1, 2):
print(group)
# result:
[0, 1000]
[1000, 5000]
[5000, 10000]
[10000, 20000]
[20000, 30000]
[30000, 40000]
[40000, 50000]