4

次のようなリストを変換する最も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。常にうまく機能するように。

4

2 に答える 2

7

簡単な解決策はどうですか?

splitlists = [mylist[i:i+n] for i in range(0, len(mylist), n-1)]
splitlists[-1].append(splitlists[0][0])
于 2012-09-05T15:45:21.600 に答える
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]]
于 2012-09-05T18:45:39.337 に答える