转换列表的最pythonic方式是什么:
mylist = [0,1,2,3,4,5,6,7,8]
到n
个元素的块中,这些元素总是以前一个块的最后一个元素开头。
最后一个块的最后一个元素应该与第一个块的第一个元素相同,以使数据结构循环。
像:
[
[0,1,2,3],
[3,4,5,6],
[6,7,8,0],
]
假设len(mylist) % (n-1) == 0
。所以它总能很好地运作。
答案 0 :(得分:7)
直截了当的解决方案呢?
splitlists = [mylist[i:i+n] for i in range(0, len(mylist), n-1)]
splitlists[-1].append(splitlists[0][0])
答案 1 :(得分:0)
一个不太直接的解决方案涉及numpy(为了矫枉过正):
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]]