迭代最后一个元素作为下一次迭代中的第一个重复

Iterate with last element repeated as first in next iteration

我有一些对象列表如下:

oldList=[a,b,c,d,e,f,g,h,i,j,...]

我需要创建一个包含嵌套列表项的新列表,如下所示:

newList=[[a,b,c,d],[d,e,f,g],[g,h,i,j]...]

或简单地说 - 上一个嵌套列表中的最后一个元素是下一个新嵌套列表中的第一个元素。

其中一种方法是

>>> l = ['a','b','c','d','e','f','g','h','i','j']
>>> [l[i:i+4] for i in range(0,len(l),3)]
[['a', 'b', 'c', 'd'], ['d', 'e', 'f', 'g'], ['g', 'h', 'i', 'j'], ['j']]

此处:

  • l[i:i+4] 意味着我们从位置 i
  • 开始打印一大块 4 个值
  • range(0,len(l),3) 意味着我们通过三步遍历列表的长度

所以这个的基本工作是,我们从列表中取出一个包含 3 个元素的块,但是我们正在修改切片长度,以便它包含一个额外的元素。这样,我们就可以得到一个包含 4 个元素的列表。

小记 - 初始化oldList=[a,b,c,d,e,f,g,h,i,j,...]无效除非a,b,c,d, 等是先前定义的。您可能正在寻找 oldList = ['a','b','c','d','e','f','g','h','i','j']

或者,如果您想要一个只分成 even 大小的块的解决方案,那么您可以尝试此代码:-

>>> [l[i:i+4] for i in range(0,len(l)-len(l)%4,3)]
[['a', 'b', 'c', 'd'], ['d', 'e', 'f', 'g'], ['g', 'h', 'i', 'j']]