Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中,如何从上一个块的最后一个元素开始,将列表拆分为大小相等的块?_Python_List - Fatal编程技术网

在Python中,如何从上一个块的最后一个元素开始,将列表拆分为大小相等的块?

在Python中,如何从上一个块的最后一个元素开始,将列表拆分为大小相等的块?,python,list,Python,List,转换列表的最佳方式是什么,如: mylist = [0,1,2,3,4,5,6,7,8] 分为n个元素块,这些元素总是以前一个块的最后一个元素开始。 最后一个区块的最后一个元素应与第一个区块的第一个元素相同,以使数据结构循环。 比如: 假设len(mylist)%(n-1)=0。所以它总是很好地工作。那么简单的解决方案呢 splitlists = [mylist[i:i+n] for i in range(0, len(mylist), n-1)] splitlists[-1].append(

转换列表的最佳方式是什么,如:

mylist = [0,1,2,3,4,5,6,7,8]
分为
n
个元素块,这些元素总是以前一个块的最后一个元素开始。 最后一个区块的最后一个元素应与第一个区块的第一个元素相同,以使数据结构循环。 比如:


假设
len(mylist)%(n-1)=0
。所以它总是很好地工作。

那么简单的解决方案呢

splitlists = [mylist[i:i+n] for i in range(0, len(mylist), n-1)]
splitlists[-1].append(splitlists[0][0])

一个涉及numpy的简单得多的解决方案(为了避免过度使用):


因此,区块的长度是您的定义变量,或者区块的数量?@sr2222可以是,对于我的问题,区块的数量实际上是更好的定义变量。您可以使用
[(lis+[lis[0]])[i:i+n]来定义范围(0,len(lis),n-1)]
,跳过第二步,这有什么好处吗?这取决于具体情况。如果使用默认数组dtype(int64),纯python解决方案的性能与numpy解决方案一样好。当您开始减小整数大小时,您开始看到显著的改进。见:
splitlists = [mylist[i:i+n] for i in range(0, len(mylist), n-1)]
splitlists[-1].append(splitlists[0][0])
from numpy import arange, roll, column_stack

n = 4    
values = arange(10, 26)  
# values -> [10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]

idx = arange(0, values.size, n)   # [ 0  4  8 12]
idx = roll(idx, -1)               # [ 4  8 12  0] 

col = values[idx]                 # [14 18 22 10]

values = column_stack( (values.reshape(n, -1), col) )

[[10 11 12 13 14]
 [14 15 16 17 18]
 [18 19 20 21 22]
 [22 23 24 25 10]]