如何在列中打印Python列表?

2024-06-16 11:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在指定数量的对齐列中显示一个简单列表。例如,以下列表显示在14列中,列之间的空格数在3到1之间变化:

a = [
         1,    2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
        15,   16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,
        29,   30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
        43,   44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,
        57,   58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
        71,   72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
        85,   86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,
        99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
        113, 114, 115, 116, 117, 118, 119, 120
    ]

我的初步尝试如下:

for a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 in zip(*[iter(a)] * 14):
    print(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)

但是,这会导致列未对齐和缺少列表元素:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28
29 30 31 32 33 34 35 36 37 38 39 40 41 42
43 44 45 46 47 48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98
99 100 101 102 103 104 105 106 107 108 109 110 111 112

这怎么可能呢?你知道吗


Tags: a2列表a1a10a3a4a5a9
3条回答

在元素之间添加一个选项卡,然后进行打印对我来说似乎很有用:

for i in range(0, len(a)-1, 14):
    print('\t'.join(map(str, a[i:i+14])))

1   2   3   4   5   6   7   8   9   10  11  12  13  14
15  16  17  18  19  20  21  22  23  24  25  26  27  28
29  30  31  32  33  34  35  36  37  38  39  40  41  42
43  44  45  46  47  48  49  50  51  52  53  54  55  56
57  58  59  60  61  62  63  64  65  66  67  68  69  70
71  72  73  74  75  76  77  78  79  80  81  82  83  84
85  86  87  88  89  90  91  92  93  94  95  96  97  98
99  100 101 102 103 104 105 106 107 108 109 110 111 112
113 114 115 116 117 118 119 120

这不是一个漂亮的解决方案,但您可以根据整数的字符串长度添加空格:

a = [
         1,    2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
        15,   16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,
        29,   30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
        43,   44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,
        57,   58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,
        71,   72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
        85,   86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,
        99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
        113, 114, 115, 116, 117, 118, 119, 120
    ]


maxLen = len(str(max(a)))
a = [str(A)+" "*(maxLen-len(str(A))) for A in a]

for a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 in zip(*[iter(a)] * 14):
    print(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)

输出:

1   2   3   4   5   6   7   8   9   10  11  12  13  14 
15  16  17  18  19  20  21  22  23  24  25  26  27  28 
29  30  31  32  33  34  35  36  37  38  39  40  41  42 
43  44  45  46  47  48  49  50  51  52  53  54  55  56 
57  58  59  60  61  62  63  64  65  66  67  68  69  70 
71  72  73  74  75  76  77  78  79  80  81  82  83  84 
85  86  87  88  89  90  91  92  93  94  95  96  97  98 
99  100 101 102 103 104 105 106 107 108 109 110 111 112

您可以使用一些字符串格式:

from itertools import izip_longest

width = 14  
for lst in izip_longest(*[iter(a)]*width, fillvalue=''):
  print(('{:3} '*width).format(*lst))

记住使用^{}而不是zip,这样列表中的所有项目都会被打印出来,从而解决了缺少项目的问题。你知道吗


  1   2   3   4   5   6   7   8   9  10  11  12  13  14 
 15  16  17  18  19  20  21  22  23  24  25  26  27  28 
 29  30  31  32  33  34  35  36  37  38  39  40  41  42 
 43  44  45  46  47  48  49  50  51  52  53  54  55  56 
 57  58  59  60  61  62  63  64  65  66  67  68  69  70 
 71  72  73  74  75  76  77  78  79  80  81  82  83  84 
 85  86  87  88  89  90  91  92  93  94  95  96  97  98 
 99 100 101 102 103 104 105 106 107 108 109 110 111 112 
113 114 115 116 117 118 119 120 

相关问题 更多 >