2017-05-30 61 views
2

我有这样如何在Python中打印指定列宽的列表?

mylist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 

如何打印列表与指定的列宽

例如,我想打印column = 5则新行

print(mylist, column= 5) 
[ 1, 2, 3, 4, 5, 
    6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 
16, 17, 18, 19, 20] 

或者我想要的清单打印column = 10 then new line

print(mylist, column= 10) 
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 

我知道我可以使用for-loop来做到这一点,但我想知道是否有这样做的功能呢?

回答

5

使用numpy数组而不是列表并重新设置数组。

>>> import numpy as np 
>>> array = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]) 
>>> 
>>> column = 5 
>>> print(array.reshape(len(array)/column, column)) 
[[ 1 2 3 4 5] 
[ 6 7 8 9 10] 
[11 12 13 14 15] 
[16 17 18 19 20]] 
>>>>>> column = 10 
>>> print(array.reshape(len(array)/column, column)) 
[[ 1 2 3 4 5 6 7 8 9 10] 
[11 12 13 14 15 16 17 18 19 20]] 

当然,这将抛出一个ValueError如果它是不可能划分成array同样column大小列。

3

不知道为什么,但我认为有些东西接近我想你想达到可使用numpy的阵列重塑来完成通过固定的行数为-1

import numpy as np 
array=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]) array 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
     18, 19, 20]) 
array.reshape(-1,5) 

array([[ 1, 2, 3, 4, 5], 
     [ 6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15], 
     [16, 17, 18, 19, 20]]) 

array.reshape(-1,10) 

给出

array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]]) 
+1

很酷,我不知道'reshape'接受-1作为参数。更多信息在这里:https://stackoverflow.com/questions/18691084/what-does-1-mean-in-numpy-reshape – timgeb

+1

感谢您的链接 – Eliethesaiyan

1

你也可以通过使用切片来做到这一点。

mylist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 

def print_list(mylist, no_of_cols): 
    start_index = 0 
    for i in range(no_of_cols, len(mylist), no_of_cols): 
     print mylist[start_index:i] 
     start_index = i 

    if len(mylist) > start_index: 
     print mylist[start_index:len(mylist)] 

print_list(mylist, 5)