Skip to main content
 首页 » 编程设计

python之使用 for 和 while 循环对列表中的每个第 n 个范围进行切片

2025年05月04日15rubylouvre

所以我有一个名为 someList 的简短列表,其中包含一些数字。我想要做的是输出列表的每 3 个元素,同时每第 3 个切片范围对其进行迭代。

如果我有

someList = [1,2,3,4,5,6,7,8,9,10] 

我的 someList 的输出应该是这样的

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

这是我的代码,我在其中定义了一个新的 temp 列表来存储输出值

someList = [1,2,3,4,5,6,7,8,9,10] 
lookupRange = 3 
temp = [] 
for index,i in enumerate(someList): 
    while index <= len(someList): 
        temp.append(someList[index:index+lookupRange]) 
        index += 1             
 
print(temp) 

然而,在运行这段代码后,我得到了一些意想不到的结果......

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

如您所见,对于前几行,我确实得到了切片范围周期为 3 的所需输出。但在那之后它就变得疯狂了......

关于这里出了什么问题有什么想法吗?

PS:我知道可能有更简单的一种线性方法来做到这一点(例如 numpy.convolve 函数),但这个问题特别需要我只用 for 和 while 循环来完成。

请您参考如下方法:

你有嵌套循环,但你只需要一个循环。

someList = [1,2,3,4,5,6,7,8,9,10] 
lookupRange = 3 
temp = [] 
for index in range(len(someList) - lookupRange + 1): 
    temp.append(someList[index:index+lookupRange])