Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用for和while循环在列表中每隔n个范围进行切片_Python_Iteration_Slice - Fatal编程技术网

Python 使用for和while循环在列表中每隔n个范围进行切片

Python 使用for和while循环在列表中每隔n个范围进行切片,python,iteration,slice,Python,Iteration,Slice,所以我有一个叫做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]] [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5

所以我有一个叫做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]]
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]
这是我的代码,我在其中定义了一个新的临时列表来存储输出值

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)
如您所见,对于前几行,我确实获得了切片范围周期为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])

您有嵌套的循环,但只需要一个循环

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])

使用列表理解:

>>> someList = [1,2,3,4,5,6,7,8,9,10]
>>> chunk = 3
>>> [someList[i : i + chunk] for i in range(len(someList) - chunk + 1)]
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]

使用列表理解:

>>> someList = [1,2,3,4,5,6,7,8,9,10]
>>> chunk = 3
>>> [someList[i : i + chunk] for i in range(len(someList) - chunk + 1)]
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]

这是一个纯Python的单行程序;Numpy不是必需的

someList = [1,2,3,4,5,6,7,8,9,10]
lookupRange = 3
temp = list(zip(*(someList[i:] for i in range(lookupRange))))
print(temp)
输出

在Python 2中,对temp的赋值可以简化为

temp = zip(*(someList[i:] for i in range(lookupRange)))
如果确实需要列表列表而不是元组列表,可以将其更改为

temp = [list(u) for u in zip(*(someList[i:] for i in range(lookupRange)))]
在Python2或Python3中同样有效

但是我会坚持使用元组,除非你需要改变那些内部列表:元组使用更少的RAM,使用元组的代码通常比基于列表的代码更快

最后一个版本使用了两个传统的for循环,而不是嵌套在列表中的生成器表达式

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

offset_lists = []
for i in range(lookupRange):
    offset_lists.append(someList[i:])

temp = []
for u in zip(*offset_lists):
    temp.append(list(u))
print(temp)
输出


这是一个纯Python的单行程序;Numpy不是必需的

someList = [1,2,3,4,5,6,7,8,9,10]
lookupRange = 3
temp = list(zip(*(someList[i:] for i in range(lookupRange))))
print(temp)
输出

在Python 2中,对temp的赋值可以简化为

temp = zip(*(someList[i:] for i in range(lookupRange)))
如果确实需要列表列表而不是元组列表,可以将其更改为

temp = [list(u) for u in zip(*(someList[i:] for i in range(lookupRange)))]
在Python2或Python3中同样有效

但是我会坚持使用元组,除非你需要改变那些内部列表:元组使用更少的RAM,使用元组的代码通常比基于列表的代码更快

最后一个版本使用了两个传统的for循环,而不是嵌套在列表中的生成器表达式

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

offset_lists = []
for i in range(lookupRange):
    offset_lists.append(someList[i:])

temp = []
for u in zip(*offset_lists):
    temp.append(list(u))
print(temp)
输出