2013-07-05 469 views
0


我有一个列表
[1,2,3,4,5,6,7,8]
欲将此转换为[[1,2, 3,4] [5,6,7,8]]在蟒蛇。有人可以帮我解决这个Python的转化一个维阵列成二维阵列

+0

你想应用什么样的转换?你只是想分裂它在中间? – user2357112

+0

有没有办法根据用户输入来拆分它?如果他说4,那么1d阵列被分成2x4。或者如果他说2,那么将会有一个尺寸为4x2的二维数组? – Vignesh

回答

5

要采取输入:

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)] 
+0

为什么标准库中不是“块”?我经常需要它... – djeendo

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]] 
2

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

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