【问题标题】:Python transforming one dimensional array into two dimensional array [duplicate]Python将一维数组转换为二维数组[重复]
【发布时间】:2013-07-05 07:38:46
【问题描述】:


我有一个清单
[1,2,3,4,5,6,7,8]
我想在 python 中将其转换为 [[1,2,3,4][5,6,7,8]]。有人可以帮我解决这个问题吗

【问题讨论】:

  • 您要应用什么样的转换?你只是想在中间分割它吗?
  • 有没有办法根据用户输入来拆分它?如果他说 4,那么 1d 数组被分成 2x4。或者如果他说 2 那么会有一个维度为 4x2 的二维数组??

标签: python arrays multidimensional-array


【解决方案1】:

接受输入:

def chunks(l, n):
    return [l[i:i+n] for i in range(0, len(l), n)]

mylist = [1,2,3,4,5,6,7,8]
while 1:
    try:
        size = int(raw_input('What size? ')) # Or input() if python 3.x
        break
    except ValueError:
        print "Numbers only please"

print chunks(yourlist, size)

打印:

[[1, 2], [3, 4], [5, 6], [7, 8]] # Assuming 2 was the input

甚至:

>>> zip(*[iter(l)]*size) # Assuming 2 was the input
[(1, 2), (3, 4), (5, 6), (7, 8)]

【讨论】:

  • 为什么标准库中没有“块”?我经常需要它...
【解决方案2】:

还有 numpy 方式(如果你的列表是数字或字符串等的统一列表)。

import numpy
a = numpy.array(lst)
nslices = 4
a.reshape((nslices, -1))

【讨论】:

    【解决方案3】:

    你可以使用itertools.islice:

    >>> from itertools import islice
    def solve(lis, n):
         it = iter(lis)
         return [list(islice(it,n)) for _ in xrange(len(lis)/n)]
    ... 
    >>> solve(range(1,9),4)
    [[1, 2, 3, 4], [5, 6, 7, 8]]
    >>> solve(range(1,9),2)
    [[1, 2], [3, 4], [5, 6], [7, 8]]
    

    【讨论】: