python – 将列表重塑为具有最大行长度的形状

我有一个数组:foo = [1,2,3,4,5,6,7,8,9,10]
我想知道将这个数组放在以下形状上的最佳方法:

[[ 1.,  2.,  3.],
 [ 4.,  5.,  6.],
 [ 7.,  8.,  9.],
 [10.]]

我应该怎么做 ?
谢谢!

我目前在做什么

由于foo不包含使用numpy.reshape()的3个元素中的多个元素,因此会出错

import numpy as np
np.reshape(foo,(-1,3))

ValueError: cannot reshape array of size 10 into shape (3)

所以我需要强制我的数组包含多个3个元素,或者删除一些(但是我丢失了一些数据):

_foo = np.reshape(foo[:len(foo)-len(foo)%3],(-1,3))

print(_foo)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

或者用nan扩展:

if len(foo)%3 != 0:
    foo.extend([np.nan]*((len(foo)%3)+1))

_foo = np.reshape(foo,(-1,3))
print(_foo)
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. nan nan]]

笔记

> @cᴏʟᴅsᴘᴇᴇᴅ建议改为使用完整数组(例如,填充为nan或0)

最佳答案 你可以使用
@NedBatchelder’s chunk generator(在那里upvote).

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

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

list(chunks(lst, 3))

# [[1, 2, 3],
#  [4, 5, 6],
#  [7, 8, 9],
#  [10]]
点赞